Compare commits

...

171 Commits

Author SHA1 Message Date
Aaron Franke
8d9d58f112 Merge pull request #497 from aaronfranke/voxel-memory
Add memory usage to the Voxel demo
2020-07-09 16:57:19 -04:00
Aaron Franke
bd05e88ce0 Add memory usage to the Voxel demo 2020-07-08 13:26:28 -04:00
Aaron Franke
2434876738 Merge pull request #496 from aaronfranke/demo-categories
Categorize demos and add README files
2020-07-04 13:48:50 -04:00
Aaron Franke
8dff86d370 Add README files to categories 2020-07-03 20:45:51 -04:00
Aaron Franke
6b11ca7302 Move around 2D and GUI demos 2020-07-03 20:04:59 -04:00
Aaron Franke
cee39035e3 Move mobile demos to their own folder 2020-07-03 19:45:04 -04:00
Aaron Franke
c33ce26a93 Merge pull request #483 from fire/extended-physics-tests
Add extended physics tests.
2020-07-03 01:51:46 -04:00
K. S. Ernest (iFire) Lee
3fd13c1a82 Add extended physics tests. 2020-07-02 21:39:11 -07:00
Aaron Franke
f74217c1dc Merge pull request #492 from aaronfranke/multitouch
Remove useless "_find_free_pointer_id" method in Multitouch View
2020-07-02 14:32:35 -04:00
Aaron Franke
5215bc00f8 Remove useless "_find_free_pointer_id" method in Multitouch View 2020-07-02 13:58:34 -04:00
Aaron Franke
1ae23b63aa Merge pull request #493 from Calinou/2d-platformer-font-disable-aa
Disable antialiasing on the font in the 2D platformer demo
2020-07-02 13:58:02 -04:00
Aaron Franke
b99cd953d2 Merge pull request #494 from Calinou/2d-platformer-progressive-jump-interrupt
Progressively interrupt the jump in the 2D platformer demo
2020-07-02 13:57:14 -04:00
Aaron Franke
8823628b02 Merge pull request #495 from TwistedTwigleg/IK_Demo_Godot_3_2_2_Fix
Godot 3.2 IK demo SkeletonIK error fix
2020-07-02 13:56:29 -04:00
TwistedTwigleg
1ad95a443f Fixed bug in the IK demo where the SkeletonIK scene would print an error. The issue is that the target nodes are initialized after the SkeletonIK node. Moving the nodes fixed the issue and now no more errors are printed 2020-07-02 10:10:33 -04:00
Hugo Locurcio
79ad34dc0f Progressively interrupt the jump in the 2D platformer demo
This feels more smooth while still giving a sense of control to
the player.
2020-07-02 15:32:17 +02:00
Hugo Locurcio
aa390d1b30 Disable antialiasing on the font in the 2D platformer demo
Pixel fonts look best when antialiasing is disabled.
2020-07-02 15:21:39 +02:00
Aaron Franke
ba44700ebe Merge pull request #491 from aaronfranke/cthulhu
Many tweaks thanks to IAmActuallyCthulhu and some other misc tweaks
2020-06-28 13:37:38 -04:00
Aaron Franke
006309bd6f Many tweaks thanks to IAmActuallyCthulhu
Also change apostrophes to double quotes and update C# projects
2020-06-28 13:19:13 -04:00
Aaron Franke
866f826124 Merge pull request #489 from aaronfranke/3dplat
Tweak the 3D platformer demo
2020-06-28 02:31:00 -04:00
Aaron Franke
c5c5fedec8 Update 3D platformer 2020-06-28 02:23:30 -04:00
Aaron Franke
f34e61eaca Merge pull request #490 from aaronfranke/misc-tweaks-3.2.2
Misc fixes and tweaks to many demos for 3.2.2
2020-06-28 02:23:18 -04:00
Aaron Franke
189d6ac9b4 Misc fixes and tweaks to many demos 2020-06-27 21:07:49 -04:00
Aaron Franke
343669ca06 Merge pull request #488 from aaronfranke/no-default-env
Clean up unused and outdated environment files
2020-06-27 21:07:26 -04:00
Aaron Franke
c13e56662f Clean up unused and outdated environment files 2020-06-27 20:58:19 -04:00
Aaron Franke
dc6efcd429 Merge pull request #487 from aaronfranke/ik-again
Many style fixes and other tweaks for the IK demo
2020-06-27 20:58:01 -04:00
Aaron Franke
aaf3483618 Move Godot Battle Bot model and materials to a subfolder
Also minify textures by making them really low resolution
2020-06-27 15:40:51 -04:00
Aaron Franke
e30b9d4c7d Change environment to 3.1/3.2 environment 2020-06-27 15:14:16 -04:00
Aaron Franke
2ae60f3ac7 Many style fixes for the IK demo 2020-06-27 15:14:16 -04:00
Aaron Franke
87f6a4e3fd Merge pull request #486 from aaronfranke/os-test
Add Mono C# preprocessor defines, README, and screenshots to OS testing demo
2020-06-24 03:14:28 -04:00
Aaron Franke
eac96a9148 Add a README and screenshots to the OS test demo 2020-06-24 02:17:46 -04:00
Aaron Franke
f0a07c43a8 Add Mono C# preprocessor testing to OS test demo 2020-06-24 02:17:46 -04:00
Aaron Franke
7b465152dc Merge pull request #484 from Calinou/add-os-testing-demo
Add an operating system testing demo
2020-06-23 13:51:54 -04:00
Hugo Locurcio
4bafb96fcb Add an operating system testing demo
This demo showcases various OS-specific features in Godot.
It can be used to test Godot while porting it to a new platform
or to check for regressions.

This closes #8.
2020-06-23 09:39:22 +02:00
Rémi Verschelde
d4a2a57834 Merge pull request #482 from timoschwarzer/android-iap-3.2.2-godotgoogleplaybilling
Update Android IAP demo to reflect recent changes
2020-06-22 11:28:55 +02:00
Aaron Franke
d29fc74ae8 Merge pull request #481 from Calinou/switch-to-github-actions
Switch continuous integration from Travis CI to GitHub Actions
2020-06-22 04:29:39 -04:00
Aaron Franke
033a5338d5 Merge pull request #480 from aaronfranke/trail-space-format
Remove trailing space characters in the formatting script
2020-06-21 23:23:50 -04:00
Aaron Franke
35d44b5d85 Remove trailing space characters in the formatting script 2020-06-21 23:00:13 -04:00
Timo Schwarzer
9a3a831a34 Update Android IAP demo to reflect recent changes 2020-06-20 00:26:45 +02:00
Aaron Franke
d3317cc91d Merge pull request #473 from nekomatata/physics-tests
Add Physics Tests project
2020-06-19 15:25:26 -04:00
PouleyKetchoupp
afd99e5aed Add Physics Tests project 2020-06-19 10:27:53 +02:00
Hugo Locurcio
b6c0283c22 Switch continuous integration from Travis CI to GitHub Actions 2020-06-18 09:26:09 +02:00
Aaron Franke
3ea2246466 Merge pull request #479 from timoschwarzer/android-iap-3.2.2-fix
Fix small mistakes with new Android IAP API
2020-06-15 02:24:56 -04:00
Timo Schwarzer
ea01309d56 Fix small mistakes with new Android IAP API 2020-06-15 07:27:18 +02:00
Aaron Franke
9600d93a33 Merge pull request #478 from timoschwarzer/android-iap-3.2.2
Update Android IAP demo for 3.2.2
2020-06-14 14:59:08 -04:00
Timo Schwarzer
74924dd073 Update Android IAP demo for 3.2.2 2020-06-14 20:04:23 +02:00
Aaron Franke
5363f8a75a Merge pull request #477 from aaronfranke/unhandled-input
Replace _input with _unhandled_input in most places
2020-06-09 11:48:25 -04:00
Aaron Franke
5f1905e0d6 Replace _input with _unhandled_input 2020-06-08 22:43:19 -04:00
Aaron Franke
d1ed6dbd82 Merge pull request #476 from Jayman2000/dodge-the-creeps-cc0
Correct Dodge the Creeps' copyright info
2020-06-08 12:13:20 -04:00
Jason Yundt
20c10dcb06 Correct Dodge the Creeps' copyright info
It originally said that "Abstract Platformer" was copyright kenny.nl.
This is not true. "Abstract Platformer" was dedicated to the public
domain using CC0. "When CC0 is applied to a work, copyright no longer
applies to the work in most jurisdictions around the world." (Source:
https://creativecommons.org/faq/#how-do-cc-licenses-operate)

It also said that "Abstract Platformer" was created in the years
2010-2020. While the "Abstract Platformer" webpage
(https://www.kenney.nl/assets/abstract-platformer) does say "Copyright ©
2010 - 2020", I believe that that's a copyright notice for the website
itself, not the asset pack. I'm not sure when Kenney started working on
"Abstract Platformer", but I'm confident that it was published in 2016
because:

 * All of the files in the ZIP archive are dated 2016.
 * "Abstract Platformer" was published to OpenGameArt.org in 2016. See:
   https://opengameart.org/content/abstract-platformer

I didn't think that it made sense to call that section of the README
"Licenses" anymore because "[...]CC0 is not a license; it is a public
domain dedication." (Source:
https://creativecommons.org/faq/#how-do-cc-licenses-operate)
2020-06-08 11:13:09 -04:00
Aaron Franke
48eb973127 Merge pull request #469 from aaronfranke/voxel
Add a Voxel demo project
2020-05-26 10:07:21 -04:00
Aaron Franke
050fda3a4c Add a Voxel demo project 2020-05-26 06:46:02 -04:00
Aaron Franke
ac5013f9ec Merge pull request #468 from aaronfranke/2d-shader-gles3
Convert the Screen Space Shaders demo back to GLES 3
2020-05-12 14:12:01 -04:00
Aaron Franke
ed2348080c Convert the Screen Space Shaders demo back to GLES 3 2020-05-12 13:56:03 -04:00
Aaron Franke
a9c63035da Merge pull request #465 from aaronfranke/gitignore-translation
Add translation ignore
2020-05-08 01:34:12 -04:00
Aaron Franke
7a5c0872d5 Add translation ignore
Now synced with GitHub's Godot.gitignore plus some extra lines
2020-05-08 01:30:34 -04:00
Aaron Franke
0eeaf0ecd8 Add credits for the music used in the 2D platformer demos (#461)
* Add credits for the music used in the 2D platformer demos

* Update 2d/platformer/README.md

Co-Authored-By: Hugo Locurcio <hugo.locurcio@hugo.pro>

* Update 2d/physics_platformer/README.md

Co-Authored-By: Hugo Locurcio <hugo.locurcio@hugo.pro>

Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2020-04-07 13:59:36 -04:00
Aaron Franke
7939f8e348 Merge pull request #459 from EludeQ/updated-dodge-the-creeps
Updated the dodge_the_creeps demo to include the "Removing the creeps" part in the tutorial.
2020-04-04 07:16:21 -04:00
Amara M. Angel
ee388dd5df Updated the dodge_the_creeps demo to include the "removing the creeps" part 2020-04-04 13:11:10 +02:00
Aaron Franke
b548a848b1 Merge pull request #460 from EludeQ/viewports-frame_post_draw
Update Viewports tutorial to use "frame_post_draw"
2020-04-03 16:52:26 -04:00
Amara M. Angel
7a9b45f156 Update Viewports tutorial to use "frame_post_draw" 2020-04-03 19:42:51 +02:00
Aaron Franke
57baf0a1b5 Merge pull request #453 from aaronfranke/plugin-proj
Refactor the plugin demos to be inside of a project and add main screen plugin demo
2020-03-31 03:12:26 -04:00
Aaron Franke
a0a87c3bea Add a main screen plugin to the plugin demos 2020-03-25 23:29:55 -04:00
Aaron Franke
51c0f3abb8 Refactor the plugin demos to be inside of a project for convenience 2020-03-25 23:28:42 -04:00
LaBodilsen
8464543a23 simplifying steering to a single line with move_toward (#451)
* simplyfied the steering to a single line with lerp

Replaced:
	if steer_target < steer_angle:
		steer_angle -= STEER_SPEED * delta
		if steer_target > steer_angle:
			steer_angle = steer_target
	elif steer_target > steer_angle:
		steer_angle += STEER_SPEED * delta
		if steer_target < steer_angle:
			steer_angle = steer_target
	
	steering = steer_angle
with
	steering = lerp(steering, steer_target, STEER_SPEED)

and lowered STEER_SPEED to 0.2

* Update vehicle.gd

* added space around *
2020-03-25 13:46:42 -04:00
Rémi Verschelde
e95cbac634 Merge pull request #450 from aaronfranke/travis
Add a formatting script for local checking and for Travis CI
2020-03-25 09:12:38 +01:00
Aaron Franke
eab59a6d2e Merge pull request #452 from aaronfranke/issue-templates
Remove duplicate issue templates
2020-03-23 04:58:06 -04:00
Aaron Franke
474f246096 Remove duplicate issue templates 2020-03-23 04:57:24 -04:00
Aaron Franke
a12f54cfef Update issue templates 2020-03-23 04:51:27 -04:00
Aaron Franke
7e09d2fec7 Commit files changed by the formatting script 2020-03-19 20:30:40 -04:00
Aaron Franke
7ba8b9930d Add a formatting script for Travis CI 2020-03-19 20:30:33 -04:00
Aaron Franke
ec28f44e3c Merge pull request #449 from aaronfranke/description
Add descriptions to all projects with README files
2020-03-17 19:12:03 -04:00
Aaron Franke
f9e7456b70 Add descriptions to all projects with README files
These show up in the project manager when hovering over projects.
2020-03-16 20:50:53 -04:00
Aaron Franke
93b1f689f2 Merge pull request #447 from aaronfranke/multitouch
Multitouch View tweaks
2020-03-15 12:05:55 -04:00
Aaron Franke
c0880343bc Merge pull request #446 from aaronfranke/dodge-the-attributions
Move Dodge the Creeps license information into the README files
2020-03-15 12:05:18 -04:00
Aaron Franke
43dfa363c3 Merge pull request #445 from aaronfranke/kc2d
Organize and simplify the Kinematic Character 2D demo
2020-03-15 12:04:51 -04:00
Aaron Franke
699abade3a Merge pull request #448 from aaronfranke/mult-thread-load
Style tweaks and add import files to multiple threads loading demo
2020-03-15 12:04:26 -04:00
Aaron Franke
1ef6b121e3 Style tweaks and add import files to multiple threads loading demo 2020-03-15 04:37:34 -04:00
Vitaliy
5f7072a18d Multiple-threads loading (#425)
Add Multiple-threads loading demo
2020-03-15 04:25:18 -04:00
Aaron Franke
bc949bd47e Multitouch View tweaks 2020-03-14 03:07:16 -04:00
Aaron Franke
38d44dbb70 Move Dodge the Creeps license information into the README files 2020-03-14 01:58:57 -04:00
Aaron Franke
022ec69810 Organize and simplify the Kinematic Character 2D demo 2020-03-14 01:39:19 -04:00
Aaron Franke
f3c8885d8f Merge pull request #444 from aaronfranke/truck-town-tres
Convert materials to tres format in Truck Town
2020-03-13 15:12:15 -04:00
Aaron Franke
b103db5e50 Convert materials to tres format in Truck Town 2020-03-13 06:19:13 -04:00
Aaron Franke
671e1299e6 Merge pull request #443 from aaronfranke/2d-nav-poly-tweak
Tweak 2D navigation polygon demo camera and remove RPG unused files
2020-03-13 05:43:08 -04:00
Aaron Franke
bb61e49397 Tweak 2D navigation polygon demo camera and remove RPG unused files 2020-03-12 22:04:42 -04:00
Aaron Franke
69f21ce4c7 Merge pull request #442 from aaronfranke/dodge-the-csproj
Fix C# project files for Dodge the Creeps
2020-03-12 21:14:04 -04:00
Aaron Franke
d189a2b05a Fix C# project files for Dodge the Creeps 2020-03-12 20:44:42 -04:00
Aaron Franke
82fe29b90b Merge pull request #441 from aaronfranke/issue-template
Improve the issue template and add a PR template
2020-03-11 22:32:30 -04:00
Aaron Franke
ff483e2b71 Improve the issue template and add a PR template
Improve the comments in the issue template, and the PR template is entirely one comment.
2020-03-11 18:52:44 -04:00
Aaron Franke
758f38db67 Merge pull request #436 from aaronfranke/astar-kinematic
Some changes to Astar and Kinematic Character 3D
2020-03-10 16:16:15 -04:00
Aaron Franke
5caa78ef58 Some changes to kinematic character 3D 2020-03-10 07:23:55 -04:00
Aaron Franke
13f6e015bd Some changes to Astar code 2020-03-10 06:48:50 -04:00
Aaron Franke
db2941bed4 Merge pull request #435 from Calinou/fix-hfsm-comment
Fix incorrect comment in hierarchical FSM demo script
2020-03-09 10:22:16 -04:00
Aaron Franke
9553549a61 Merge pull request #432 from aaronfranke/readme
Add README files to many demos
2020-03-09 10:21:53 -04:00
Hugo Locurcio
222f94444a Fix incorrect comment in hierarchical FSM demo script
This closes #433.
2020-03-09 15:00:56 +01:00
Aaron Franke
9b4cac5782 Add README files to most of the misc demos
The Android ones can wait for later
2020-03-09 05:39:32 -04:00
Aaron Franke
fea5db8ed2 Add README files to loading and multiplayer demos 2020-03-09 05:06:17 -04:00
Aaron Franke
9e3ffe456b Add README files to GUI demos 2020-03-09 04:26:24 -04:00
Aaron Franke
8cdddc87ce Add README files to audio demos 2020-03-09 03:54:32 -04:00
Aaron Franke
da280ec220 Add README to and fix Circle Pop demo
Circle Pop gets its own commit since I found a bug that had to be fixed
2020-03-09 03:54:32 -04:00
Aaron Franke
f2a18910aa Add README files to Viewport demos 2020-03-09 03:54:32 -04:00
Aaron Franke
2eaedf8064 Add README files to demos with multiple versions 2020-03-09 03:54:32 -04:00
Aaron Franke
7e0032eb8e Add README files to 3D demos 2020-03-09 03:54:32 -04:00
Aaron Franke
a24ac796b6 Add README files to 2D demos 2020-03-09 03:54:32 -04:00
Aaron Franke
9809601e40 Merge pull request #431 from aaronfranke/no-grid
Remove the grid based movement demo
2020-03-09 03:54:12 -04:00
Aaron Franke
9b6109e44d Merge pull request #428 from aaronfranke/splitscreen
Add a splitscreen mode to the 2D platformer.
2020-03-07 19:56:52 -05:00
Aaron Franke
2ea2b02b68 Remove grid based movement demo
I don't think there's a point to this since we also have the JRPG demo.
2020-03-07 19:54:03 -05:00
Aaron Franke
ebc435074b [2D Platformer] Add a splitscreen mode 2020-03-06 23:00:11 -05:00
Aaron Franke
f5f72e6d3e [2D Platformer] Move Player out of Level, set limits in a script 2020-03-06 18:17:33 -05:00
Aaron Franke
e11fa006d6 Merge pull request #427 from aaronfranke/joypad
Refactor the Joypads demo
2020-03-06 18:17:01 -05:00
Aaron Franke
5322be1a54 Refactor the Joypads demo 2020-03-05 20:50:16 -05:00
Aaron Franke
18679efd75 Merge pull request #426 from aaronfranke/gles2
Convert most demos to GLES 2 and update to Godot 3.2
2020-03-05 20:49:11 -05:00
Aaron Franke
aea4010bc8 Convert most demos to GLES 2
Also fix Viewport error in 3D scaling demo, add an icon to Multiplayer Bomber, and rename BPM sync files.
2020-03-04 20:59:12 -05:00
Aaron Franke
db7c9f162f Open and save 3D IK demo in Godot 3.2 2020-03-04 20:59:12 -05:00
Aaron Franke
c72f65ed36 Update C# demos to Godot 3.2 2020-03-04 20:30:30 -05:00
Aaron Franke
424ad342ad Merge pull request #315 from aaronfranke/2point5d
Add 2.5D Demo Projects
2020-03-02 22:03:53 -05:00
Aaron Franke
841eb1fa37 Add icon for the 2.5D editor viewport 2020-03-01 22:29:44 -05:00
Aaron Franke
1671b4e30e Add music and set physics engine to Bullet 2020-03-01 17:14:11 -05:00
Aaron Franke
c7cc72b705 Add screenshots and tweak README files 2020-03-01 04:43:32 -05:00
Aaron Franke
d1ba41da5d 2.5D Editor Viewport for Mono C# 2020-03-01 04:37:41 -05:00
Aaron Franke
cc68af17af 2.5D Editor Viewport for GDScript 2020-03-01 04:36:44 -05:00
Aaron Franke
7e539cd182 2.5D Demo Project for GDScript
Co-authored-by: Stephen Agbete (Steph155) <bgsteph15@mail.com>
2020-02-29 22:39:32 -05:00
Aaron Franke
722ea9bc01 2.5D Demo Project for Mono C#
Co-authored-by: Stephen Agbete (Steph155) <bgsteph15@mail.com>
2020-02-29 22:39:20 -05:00
Aaron Franke
ca761cff87 Merge pull request #424 from Calinou/readme-add-scan-instructions
Add instructions on importing all projects at once in the README
2020-02-24 02:08:05 -05:00
Aaron Franke
5809089e9e Merge pull request #419 from aaronfranke/multiplayer
Update networking and multiplayer demos
2020-02-20 16:39:23 -05:00
Hugo Locurcio
abe1b0f367 Add instructions on importing all projects at once in the README
This may be helpful to newcomers; see #423.
2020-02-20 22:11:57 +01:00
Aaron Franke
b310877037 Update other networking demos, with style fixes 2020-02-20 15:13:21 -05:00
Aaron Franke
984a731502 Update multiplayer bomber demo 2020-02-20 15:13:21 -05:00
Aaron Franke
de8a79b35b Merge pull request #421 from aaronfranke/platform-3d-animtree
Update Platformer 3D to use AnimationTree and organize into subfolders
2020-02-20 15:12:24 -05:00
Aaron Franke
399de3e954 Organize 3D platformer demo files 2020-02-19 19:09:55 -05:00
Aaron Franke
486d582802 Update 3D platformer to use AnimationTree 2020-02-19 18:55:14 -05:00
Aaron Franke
001e51d2d3 Merge pull request #413 from Calinou/add-viewport-3d-scaling-demo
Add a viewport 3D scaling demo
2020-02-19 15:22:11 -05:00
Hugo Locurcio
b927ea3c63 Add a viewport 3D scaling demo
This demo shows how to scale the 3D viewport rendering without
affecting 2D elements such as the HUD. It also demonstrates how to
toggle filtering on a viewport by using TextureRect to display the
ViewportTexture delivered by the Viewport node.
2020-02-19 21:13:20 +01:00
Aaron Franke
f6c4a0000f Merge pull request #416 from aaronfranke/platformer-tweaks
Tweak the 2D platformer demos, particularly Physics Platformer
2020-02-19 15:08:35 -05:00
Aaron Franke
853565d1be Tweak the platformer demos, particularly physics platformer 2020-02-19 00:37:59 -05:00
Aaron Franke
073640ffcc Merge pull request #414 from aaronfranke/2d-3.2
Update 2D demos for 3.2 and convert many to GLES 2
2020-02-18 23:37:37 -05:00
Aaron Franke
545d63cd2d Merge pull request #412 from NetroScript/fixing-Sprites-at-2x-Resolution
Changing the art assets for the 2D platformers to "real" pixel art (instead of 2x upscaled)
2020-02-18 23:33:07 -05:00
Aaron Franke
c215c62df1 Convert many 2D projects to GLES 2 2020-02-17 21:29:54 -05:00
Aaron Franke
dda0bd7e20 Update other 2D demos for Godot 3.2 2020-02-17 21:29:54 -05:00
Aaron Franke
35bd408367 Update and improve isometric demo for 3.2
Also tweak hex map demo
2020-02-17 20:29:08 -05:00
Aaron Franke
ac179c6745 Merge pull request #382 from TwistedTwigleg/Godot_3_2_IK_Fix
Fixed GDScript IK demo so it works with Godot 3.2
2020-02-17 18:34:54 -05:00
TwistedTwigleg
2136c99672 Fixed up LookAt IK code so it better follows the style guide. Touched up a bunch of the comments 2020-02-17 14:45:02 -05:00
TwistedTwigleg
fdb0d77e88 Fixed style issues in IK Demo. Added a bit of static typing hints to the LookAt IK file to better fit the rest of the scripts 2020-02-17 12:14:36 -05:00
NetroScript
fbe6286656 for the 2d platformer demos changing the asset resolution from 2x upscaled to "true" pixel art, also adjusting values likes positions 2020-02-17 17:05:10 +01:00
Aaron Franke
ef98347469 Merge pull request #358 from pigdevstudio/input-remap-revamp
Revamp Input Remap demo simplifying it
2020-02-17 05:57:24 -05:00
Aaron Franke
07e696661c Merge pull request #392 from Calinou/tweak-3d-settings
Tweak 3D settings in various demos
2020-02-17 04:10:43 -05:00
TwistedTwigleg
1c9c754b79 Fixed SkeletonIK issue in Godot IK Demo. Now the joints should not act crazy 2020-02-16 11:43:21 -05:00
Hugo Locurcio
da374bccda Tweak 3D settings in various demos
- Use 4× MSAA for a better visual appearance.
- Use "3D Without Effects" framebuffer allocation when possible
  for better performance.
- Disable Glow in the 3D Kinematic Character demo for better
  performance. Increase the DirectionalLight strength to compensate.
- Use a non-linear attenuation for the OmniLight in the
  Window Management demo (and increase its range to compensate).
2020-02-15 23:32:00 +01:00
Aaron Franke
05801f9389 Merge pull request #411 from aaronfranke/vs-3.2
Update VisualScript demos for Godot 3.2
2020-02-12 19:59:29 -05:00
Aaron Franke
da157f6d0e Update VisualScript demos for Godot 3.2 2020-02-12 19:31:23 -05:00
Aaron Franke
13ca65800d Merge pull request #405 from NathanLovato/feature/2d-platformer-remake
Remake the 2d platformer demo
2020-02-12 19:30:46 -05:00
Henrique Campos
a76d9471f4 Add a simplified version of input remapping 2020-02-12 19:42:12 -03:00
Aaron Franke
d8546ece42 Add screenshots 2020-02-12 16:36:17 -05:00
Aaron Franke
8d48b7f994 Tweak background and organize clouds 2020-02-12 15:51:56 -05:00
Aaron Franke
c117eb1847 Minor style tweaks 2020-02-12 15:30:42 -05:00
Nathan Lovato
77800b3f15 Add more clouds to cover wide and thin window sizes 2020-02-12 07:53:43 -06:00
Nathan Lovato
332cd3bb38 Remove return type hint 2020-02-12 07:48:21 -06:00
Nathan Lovato
75df35b165 Improve background tiling, move parallax layers vertically 2020-02-12 07:47:56 -06:00
Nathan Lovato
bebf8e8249 Fix background disappearing when scaling the window
Use the keep_height aspect ratio option as in the original demo. This prevents
seeing the clear color when making the window tall
Change the ParallaxBackground scene so mirrored sections don't disappear on wide windows
2020-02-11 22:18:48 -06:00
Nathan Lovato
bd6da6a610 Limit the window size 2020-02-11 22:08:01 -06:00
Nathan Lovato
ab04b998fc Update the platformer demo's readme 2020-02-11 21:56:15 -06:00
Nathan Lovato
263bfd8bd3 Add README to the 2D platformer 2020-02-11 18:22:26 -06:00
Nathan Lovato
9ee778bd5d Address requested changes in the review
Remove unused spawn input action
Add support for the gamepad's left stick for movement
Use the project settings to store the gravity value project-wide
Remove type hints
2020-02-11 17:24:57 -06:00
Aaron Franke
2372fd155f Merge pull request #366 from aaronfranke/matrix-transform
Add Matrix Transform demo
2020-02-11 03:53:07 -05:00
Nathan Lovato
e323bead2e Remake the 2d/platformer demo from scratch
This Godot project is a complete rewrite of the official Platformer 2D demo. This is part of a proposal to improve and harmonize the official demo projects. We want to:

- Teach good programming practices with Godot.
- Bring demos to a higher quality standard.
- Unify the code in the demos.

See the [open issue](https://github.com/godotengine/godot-demo-projects/issues/390) for more information.

This new demo showcases features from the original, and works with Godot 3.2.

Co-authored-by: Johnny Goss <me@johnnygoss.dev>
2020-02-04 21:50:54 -06:00
TwistedTwigleg
2e681e132a IK demo: Fixed bug in FABRIK IK that would cause the right arm to freak out by changing the middle joint code. 2020-01-29 17:52:25 -05:00
TwistedTwigleg
40bcc0f55f Added SkeletonIK example to IK demo. Updated the anchors on all of the UI so it can scale to any sized window. Removed the project settings keeping the aspect ratio the same 2020-01-29 17:37:04 -05:00
TwistedTwigleg
59e85689ba IK Demo - Removed code that straightens the FABRIK chain when the target is out of reach because it was not working, and instead just run the FABRIK chain even if the target is out of reach. This straightens the arms like expected and simplifies the code. Moved the camera back in both the look_at_ik and fabrik_ik scenes 2020-01-29 14:13:50 -05:00
TwistedTwigleg
fd6e157596 Minor typo and style fixes for the IK demo 2020-01-29 13:43:54 -05:00
TwistedTwigleg
3dbd79217d Fixed GDScript IK demo so it works with Godot 3.2 2020-01-29 13:19:14 -05:00
Aaron Franke
21e6dc8576 Add Matrix Transform demo 2020-01-08 15:37:29 -05:00
1169 changed files with 20750 additions and 6632 deletions

6
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,6 @@
# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.
# Owners can be @users, @org/teams or emails
/misc/2.5d @aaronfranke
/mono/2.5d @aaronfranke

View File

@@ -1,18 +0,0 @@
<!-- Please search existing issues for potential duplicates before filing yours:
https://github.com/godotengine/godot-demo-projects/issues?q=is%3Aissue
-->
**Which demo project is affected:**
<!-- Specify the project name or path. -->
**OS/device including version:**
<!-- Specify GPU model and drivers if graphics-related. -->
**Issue description:**
<!-- What happened, and what was expected. -->
**Screenshots of issue:**
<!-- Drag in an image, or link in the form of "![]()". If not relevant, remove this section. -->

34
.github/ISSUE_TEMPLATE/bug-report.md vendored Normal file
View File

@@ -0,0 +1,34 @@
---
name: Bug Report
about: Report a bug with one of the demo projects.
title: ''
labels: bug
assignees: ''
---
<!--
Please search existing issues for potential duplicates before filing yours:
https://github.com/godotengine/godot-demo-projects/issues?q=is%3Aissue
Only submit an issue if it is reproducible with the latest stable Godot version.
-->
**Which demo project is affected:**
<!-- Specify the project name or path. -->
**OS/device including version:**
<!-- Specify GPU model and drivers if graphics-related. -->
**Issue description:**
<!-- What happened, what was expected, and what went wrong. -->
**Screenshots of issue:**
<!--
This section is optional.
Drag in an image, or post an image with a link in the form of:
![Alt Text Here](https://pbs.twimg.com/media/DW5AJnZVAAM1805?format=jpg)
-->

View File

@@ -0,0 +1,19 @@
---
name: Feature / Enhancement Request
about: Adding new features or improving existing ones.
title: ''
labels: enhancement
assignees: ''
---
<!--
Please search existing issues for potential duplicates before filing yours:
https://github.com/godotengine/godot-demo-projects/issues?q=is%3Aissue
-->
**Which demo project is affected:**
<!-- Specify the project name or path. -->
**Description:**

24
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,24 @@
<!--
Only submit a pull request if all of the following conditions are met:
* It must work with the latest stable Godot version. Do not submit a
pull request if it only works with alpha/beta builds.
* It must follow all of the Godot style guides, including the GDScript
style guide and the C# style guide.
* The demo should not be overcomplicated. Simplicity is usually preferred.
* If you are submitting a new demo, please ensure that it includes a
README file similar to the other demos.
* If you are submitting a copy of a demo translated to C# etc:
* Please ensure that there is a good reason to have this demo translated.
We don't want to have multiple copies of every single project.
* Please ensure that the code mirrors the original closely.
* In the project.godot file and in the README, include "with C#" etc in
the title, and also include a link to the original in the README.
-->

15
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Continuous integration
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Lint demo projects
run: |
sudo apt-get update -qq
sudo apt-get install -qq dos2unix recode
bash ./format.sh

5
.gitignore vendored
View File

@@ -1,10 +1,15 @@
# Godot-specific ignores
.import/
export.cfg
export_presets.cfg
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
# System/tool-specific ignores

8
2d/README.md Normal file
View File

@@ -0,0 +1,8 @@
# 2D Demos
These demos are all 2D, but otherwise do not have a common theme.
Languages: Most have GDScript, some have
[GDSL](https://docs.godotengine.org/en/latest/tutorials/shading/shading_reference/shading_language.html)
Renderers: 6 of them are GLES 3, but most are GLES 2

View File

@@ -13,7 +13,7 @@ func show_game_over():
yield($MessageTimer, "timeout")
$MessageLabel.text = "Dodge the\nCreeps"
$MessageLabel.show()
yield(get_tree().create_timer(1), 'timeout')
yield(get_tree().create_timer(1), "timeout")
$StartButton.show()

View File

@@ -1,6 +1,6 @@
extends Node
export (PackedScene) var Mob
export(PackedScene) var Mob
var score
func _ready():
@@ -28,11 +28,13 @@ func _on_MobTimer_timeout():
$MobPath/MobSpawnLocation.offset = randi()
var mob = Mob.instance()
add_child(mob)
var direction = $MobPath/MobSpawnLocation.rotation + PI / 2
var direction = $MobPath/MobSpawnLocation.rotation + TAU / 4
mob.position = $MobPath/MobSpawnLocation.position
direction += rand_range(-PI / 4, PI / 4)
direction += rand_range(-TAU / 8, TAU / 8)
mob.rotation = direction
mob.linear_velocity = Vector2(rand_range(mob.min_speed, mob.max_speed), 0).rotated(direction)
# warning-ignore:return_value_discarded
$HUD.connect("start_game", mob, "_on_start_game")
func _on_ScoreTimer_timeout():

View File

@@ -11,3 +11,7 @@ func _ready():
func _on_VisibilityNotifier2D_screen_exited():
queue_free()
func _on_start_game():
queue_free()

View File

@@ -0,0 +1,27 @@
# Dodge the Creeps
This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the
["Your first game"](https://docs.godotengine.org/en/latest/getting_started/step_by_step/your_first_game.html)
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
Language: GDScript
Renderer: GLES 3 (particles are not available in GLES 2)
Note: There is a C# version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/mono/dodge_the_creeps).
## Screenshots
![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif)
## Copying
`art/House In a Forest Loop.ogg` Copyright &copy; 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](http://creativecommons.org/licenses/by/3.0/). Source: https://opengameart.org/content/loop-house-in-a-forest
Images are from "Abstract Platformer". Created in 2016 by kenney.nl, [CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0/). Source: https://www.kenney.nl/assets/abstract-platformer
Font is "Xolonium". Copyright &copy; 2011-2016 Severin Meyer <sev.ch@web.de>, with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in `fonts/LICENSE.txt`.

View File

@@ -1,2 +0,0 @@
"Abstract Platformer" by kenney.nl is licensed under http://creativecommons.org/publicdomain/zero/1.0/
"House in a Forest Loop" by https://opengameart.org/users/horrorpen is licensed under http://creativecommons.org/licenses/by/3.0/

View File

@@ -1,94 +1,94 @@
Copyright 2011-2016 Severin Meyer <sev.ch@web.de>,
with Reserved Font Name Xolonium.
This Font Software is licensed under the SIL Open Font License,
Version 1.1. This license is copied below, and is also available
with a FAQ at <http://scripts.sil.org/OFL>
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Copyright 2011-2016 Severin Meyer <sev.ch@web.de>,
with Reserved Font Name Xolonium.
This Font Software is licensed under the SIL Open Font License,
Version 1.1. This license is copied below, and is also available
with a FAQ at <http://scripts.sil.org/OFL>
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

View File

@@ -16,6 +16,12 @@ _global_script_class_icons={
[application]
config/name="Dodge the Creeps"
config/description="This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the 'Your first game'
tutorial in the documentation, but ported to C#. For more details,
consider following the tutorial in the documentation."
run/main_scene="res://Main.tscn"
config/icon="res://icon.png"
@@ -58,7 +64,3 @@ move_down={
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
]
}
[rendering]
environment/default_environment="res://default_env.tres"

View File

@@ -0,0 +1,30 @@
# Hierarchical Finite State Machine
This example shows how to apply the State machine programming
pattern in GDscript, including Hierarchical States, and a
pushdown automaton.
Language: GDScript
Renderer: GLES 2
## Why use a state machine
States are common in games. You can use the pattern to:
1. Separate each behavior and transitions between behaviors,
thus make scripts shorter and easier to manage.
2. Respect the Single Responsibility Principle.
Each State object represents one action.
3. Improve your code's structure. Look at the scene tree and
FileSystem tab: without looking at the code, you'll know
what the Player can or cannot do.
You can read more about States in the excellent
[Game Programming Patterns ebook](https://gameprogrammingpatterns.com/state.html).
## Screenshots
![Screenshot](screenshots/fsm-attack.png)

View File

@@ -16,7 +16,7 @@ size_flags_vertical = 4
custom_fonts/bold_font = ExtResource( 1 )
custom_fonts/normal_font = ExtResource( 2 )
bbcode_enabled = true
bbcode_text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
bbcode_text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
States are common in games. You can use the pattern to:
@@ -25,7 +25,7 @@ States are common in games. You can use the pattern to:
3. Improve your code's structure. Look at the scene tree and FileSystem tab: without looking at the code, you'll know what the Player can or cannot do.
You can read more about States in the excellent [url=http://gameprogrammingpatterns.com/state.html]Game Programming Patterns ebook[/url]."
text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
text = "This example shows how to apply the State programming pattern in GDscript, including Hierarchical States, and a pushdown automaton.
States are common in games. You can use the pattern to:

View File

@@ -7,8 +7,8 @@ func _process(_delta):
var numbers = ""
var index = 0
for state in fsm_node.states_stack:
states_names += state.get_name() + '\n'
numbers += str(index) + '\n'
states_names += state.get_name() + "\n"
numbers += str(index) + "\n"
index += 1
$States.text = states_names
$Numbers.text = numbers

View File

@@ -1,13 +0,0 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
sky_curve = 0.25
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
ground_curve = 0.01
[resource]
background_mode = 2
background_sky = SubResource( 1 )

View File

@@ -115,7 +115,7 @@ align = 1
valign = 1
uppercase = true
script = ExtResource( 15 )
[connection signal="state_changed" from="StateMachine" to="BodyPivot/WeaponPivot/Offset/Sword" method="_on_StateMachine_state_changed"]
[connection signal="state_changed" from="StateMachine" to="StateNameDisplayer" method="_on_StateMachine_state_changed"]
[connection signal="state_changed" from="StateMachine" to="BodyPivot/WeaponPivot/Offset/Sword" method="_on_StateMachine_state_changed"]
[connection signal="animation_finished" from="AnimationPlayer" to="StateMachine" method="_on_animation_finished"]
[connection signal="attack_finished" from="BodyPivot/WeaponPivot/Offset/Sword" to="StateMachine/Attack" method="_on_Sword_attack_finished"]

View File

@@ -3,12 +3,14 @@ extends KinematicBody2D
var direction = Vector2()
export(float) var speed = 1000.0
onready var root = get_tree().root
func _ready():
set_as_toplevel(true)
func _physics_process(delta):
if is_outside_view_bounds():
if not root.get_visible_rect().has_point(position):
queue_free()
var motion = direction * speed * delta
@@ -17,10 +19,5 @@ func _physics_process(delta):
queue_free()
func is_outside_view_bounds():
return position.x > OS.get_screen_size().x or position.x < 0.0 \
or position.y > OS.get_screen_size().y or position.y < 0.0
func _draw():
draw_circle(Vector2(), $CollisionShape2D.shape.radius, Color.white)

View File

@@ -2,7 +2,7 @@ extends Node2D
var bullet = preload("Bullet.tscn")
func _input(event):
func _unhandled_input(event):
if event.is_action_pressed("fire"):
fire(owner.look_direction)

View File

@@ -1,12 +1,18 @@
extends "res://state_machine/state_machine.gd"
onready var idle = $Idle
onready var move = $Move
onready var jump = $Jump
onready var stagger = $Stagger
onready var attack = $Attack
func _ready():
states_map = {
"idle": $Idle,
"move": $Move,
"jump": $Jump,
"stagger": $Stagger,
"attack": $Attack,
"idle": idle,
"move": move,
"jump": jump,
"stagger": stagger,
"attack": attack,
}
@@ -16,16 +22,16 @@ func _change_state(state_name):
return
if state_name in ["stagger", "jump", "attack"]:
states_stack.push_front(states_map[state_name])
if state_name == "jump" and current_state == $Move:
$Jump.initialize($Move.speed, $Move.velocity)
if state_name == "jump" and current_state == move:
jump.initialize(move.speed, move.velocity)
._change_state(state_name)
func _input(event):
func _unhandled_input(event):
# Here we only handle input that can interrupt states, attacking in this case,
# otherwise we let the state node handle it.
if event.is_action_pressed("attack"):
if current_state in [$Attack, $Stagger]:
if current_state in [attack, stagger]:
return
_change_state("attack")
return

View File

@@ -22,6 +22,7 @@ func initialize(speed, velocity):
max_horizontal_speed = speed if speed > 0.0 else base_max_horizontal_speed
enter_velocity = velocity
func enter():
var input_direction = get_input_direction()
update_look_direction(input_direction)
@@ -31,6 +32,7 @@ func enter():
owner.get_node("AnimationPlayer").play("idle")
func update(delta):
var input_direction = get_input_direction()
update_look_direction(input_direction)
@@ -40,6 +42,7 @@ func update(delta):
if height <= 0.0:
emit_signal("finished", "previous")
func move_horizontally(delta, direction):
if direction:
horizontal_speed += air_acceleration * delta
@@ -53,6 +56,7 @@ func move_horizontally(delta, direction):
owner.move_and_slide(horizontal_velocity)
func animate_jump_height(delta):
vertical_speed -= gravity * delta
height += vertical_speed * delta

View File

@@ -7,9 +7,10 @@ func handle_input(event):
func get_input_direction():
var input_direction = Vector2()
input_direction.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
input_direction.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
var input_direction = Vector2(
Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
)
return input_direction

View File

@@ -59,7 +59,7 @@ func _change_state(new_state):
state = new_state
func _input(event):
func _unhandled_input(event):
if not state == States.ATTACK:
return
if attack_input_state != AttackInputStates.LISTENING:

View File

@@ -15,7 +15,10 @@ _global_script_class_icons={
[application]
config/name="Hierarchical Finite State Machine example"
config/name="Hierarchical Finite State Machine"
config/description="This example shows how to apply the State machine programming
pattern in GDscript, including Hierarchical States, and a
pushdown automaton."
run/main_scene="res://Demo.tscn"
config/icon="res://icon.png"
@@ -97,4 +100,4 @@ attack={
[rendering]
environment/default_environment="res://default_env.tres"
quality/driver/driver_name="GLES2"

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -7,10 +7,9 @@ extends Node
signal state_changed(current_state)
# You must set a starting node from the inspector or on
# the node that inherits from this state machine interface.
# If you don't the game will crash (on purpose, so you won't
# forget to initialize the state machine).
# You should set a starting node from the inspector or on the node that inherits
# from this state machine interface. If you don't, the game will default to
# the first state in the state machine's children.
export(NodePath) var start_state
var states_map = {}
@@ -22,7 +21,9 @@ func _ready():
if not start_state:
start_state = get_child(0).get_path()
for child in get_children():
child.connect("finished", self, "_change_state")
var err = child.connect("finished", self, "_change_state")
if err:
printerr(err)
initialize(start_state)
@@ -42,7 +43,7 @@ func set_active(value):
current_state = null
func _input(event):
func _unhandled_input(event):
current_state.handle_input(event)
@@ -60,14 +61,14 @@ func _change_state(state_name):
if not _active:
return
current_state.exit()
if state_name == "previous":
states_stack.pop_front()
else:
states_stack[0] = states_map[state_name]
current_state = states_stack[0]
emit_signal("state_changed", current_state)
if state_name != "previous":
current_state.enter()

13
2d/gd_paint/README.md Normal file
View File

@@ -0,0 +1,13 @@
# GD Paint
GD Paint is a simple image editor made using Godot and GDScript.
It supports different types of "brushes": a basic pen/pencil
and eraser, as well as a rectangle and a circle brush.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/gdpaint.png)

View File

@@ -1,14 +0,0 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
sky_curve = 0.25
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
ground_curve = 0.01
sun_energy = 16.0
[resource]
background_mode = 2
background_sky = SubResource( 1 )

View File

@@ -232,11 +232,9 @@ func _draw():
draw_circle(brush.brush_pos, brush.brush_shape_circle_radius, brush.brush_color)
func save_picture(path):
# Wait a couple frames so the save dialog isn't in the way.
yield (get_tree(), "idle_frame")
yield (get_tree(), "idle_frame")
# Wait until the frame has finished before getting the texture.
yield(VisualServer, "frame_post_draw")
# Get the viewport image.
var img = get_viewport().get_texture().get_data()

View File

@@ -1,8 +1,8 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://PaintControl.gd" type="Script" id=1]
[ext_resource path="res://ToolsPanel.gd" type="Script" id=2]
[ext_resource path="res://PaintTools.png" type="Texture" id=3]
[ext_resource path="res://paint_control.gd" type="Script" id=1]
[ext_resource path="res://tools_panel.gd" type="Script" id=2]
[ext_resource path="res://paint_tools.png" type="Texture" id=3]
[sub_resource type="StyleBoxFlat" id=1]
bg_color = Color( 1, 1, 1, 1 )
@@ -10,19 +10,23 @@ bg_color = Color( 1, 1, 1, 1 )
[node name="PaintRoot" type="Control"]
margin_right = 40.0
margin_bottom = 40.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="DrawingAreaBG" type="Panel" parent="."]
margin_left = 350.0
margin_right = 1280.0
margin_bottom = 720.0
custom_styles/panelf = SubResource( 1 )
custom_styles/panel = SubResource( 1 )
custom_styles/panelnc = SubResource( 1 )
[node name="PaintControl" type="Control" parent="."]
margin_right = 40.0
margin_bottom = 40.0
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="TLPos" type="Position2D" parent="PaintControl"]
position = Vector2( 350, 0 )
@@ -137,7 +141,6 @@ text = "Brush shape: Circle"
align = 1
[node name="ButtonShapeBox" type="Button" parent="ToolsPanel/BrushSettings"]
editor/display_folded = true
margin_left = 100.0
margin_top = 100.0
margin_right = 160.0
@@ -151,7 +154,6 @@ region_enabled = true
region_rect = Rect2( 0, 16, 16, 16 )
[node name="ButtonShapeCircle" type="Button" parent="ToolsPanel/BrushSettings"]
editor/display_folded = true
margin_left = 190.0
margin_top = 100.0
margin_right = 250.0

View File

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 440 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://paint_tools.png"
dest_files=[ "res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@@ -16,7 +16,10 @@ _global_script_class_icons={
[application]
config/name="GD Paint"
run/main_scene="res://Paint_root.tscn"
config/description="GD Paint is a simple image editor made using Godot and GDScript.
It supports different types of 'brushes': a basic pen/pencil
and eraser, as well as a rectangle and a circle brush."
run/main_scene="res://paint_root.tscn"
config/icon="res://icon.png"
[display]
@@ -32,4 +35,4 @@ singletons=[ ]
[rendering]
environment/default_environment="res://default_env.tres"
quality/driver/driver_name="GLES2"

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -1,20 +1,16 @@
extends Panel
var paint_control
onready var brush_settings = $BrushSettings
onready var label_tools = $LabelTools
onready var label_brush_size = $BrushSettings/LabelBrushSize
onready var label_brush_shape = $BrushSettings/LabelBrushShape
onready var label_brush_size = brush_settings.get_node(@"LabelBrushSize")
onready var label_brush_shape = brush_settings.get_node(@"LabelBrushShape")
onready var label_stats = $LabelStats
onready var label_tools = $LabelTools
var save_dialog
onready var _parent = get_parent()
onready var save_dialog = _parent.get_node(@"SaveFileDialog")
onready var paint_control = _parent.get_node(@"PaintControl")
func _ready():
# Get PaintControl and SaveFileDialog.
paint_control = get_parent().get_node("PaintControl")
save_dialog = get_parent().get_node("SaveFileDialog")
# warning-ignore-all:return_value_discarded
# Assign all of the needed signals for the oppersation buttons.
$ButtonUndo.connect("pressed", self, "button_pressed", ["undo_stroke"])
@@ -34,7 +30,7 @@ func _ready():
$ColorPickerBackground.connect("color_changed", self, "background_color_changed")
$BrushSettings/HScrollBarBrushSize.connect("value_changed", self, "brush_size_changed")
# Assign the 'file_selected' signal in SaveFileDialog.
# Assign the "file_selected" signal in SaveFileDialog.
save_dialog.connect("file_selected", self, "save_file_selected")
# Set physics process so we can update the status label.

File diff suppressed because one or more lines are too long

View File

@@ -1,13 +0,0 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 )
sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 )
sky_curve = 0.25
ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 )
ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 )
ground_curve = 0.01
[resource]
background_mode = 2
background_sky = SubResource( 1 )

View File

@@ -1,36 +0,0 @@
extends TileMap
enum CellType { EMPTY = -1, ACTOR, OBSTACLE, OBJECT }
func _ready():
for child in get_children():
set_cellv(world_to_map(child.position), child.type)
func get_cell_pawn(coordinates):
for node in get_children():
if world_to_map(node.position) == coordinates:
return(node)
func request_move(pawn, direction):
var cell_start = world_to_map(pawn.position)
var cell_target = cell_start + direction
var cell_target_type = get_cellv(cell_target)
match cell_target_type:
CellType.EMPTY:
return update_pawn_position(pawn, cell_start, cell_target)
CellType.OBJECT:
var object_pawn = get_cell_pawn(cell_target)
object_pawn.queue_free()
return update_pawn_position(pawn, cell_start, cell_target)
CellType.ACTOR:
var pawn_name = get_cell_pawn(cell_target).name
print("Cell %s contains %s" % [cell_target, pawn_name])
func update_pawn_position(pawn, cell_start, cell_target):
set_cellv(cell_target, pawn.type)
set_cellv(cell_start, CellType.EMPTY)
return map_to_world(cell_target) + cell_size / 2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,84 +0,0 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://pawns/actor.gd" type="Script" id=1]
[ext_resource path="res://pawns/sprites/character.png" type="Texture" id=2]
[sub_resource type="Animation" id=1]
resource_name = "bump"
length = 0.1
step = 0.01
tracks/0/type = "value"
tracks/0/path = NodePath("Pivot/Sprite:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = {
"times": PoolRealArray( 0, 0.02, 0.04, 0.06, 0.08, 0.1 ),
"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
"update": 0,
"values": [ Vector2( 0, 0 ), Vector2( -1.5, -9 ), Vector2( 6.5, 2.5 ), Vector2( -11.5, 8.5 ), Vector2( 4, -5 ), Vector2( 0, 0 ) ]
}
[sub_resource type="Animation" id=2]
resource_name = "walk"
length = 0.25
step = 0.05
tracks/0/type = "value"
tracks/0/path = NodePath("Pivot/Sprite:self_modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = false
tracks/0/keys = {
"times": PoolRealArray( 0, 0.1, 0.25 ),
"transitions": PoolRealArray( 1, 1, 1 ),
"update": 0,
"values": [ Color( 1, 1, 1, 1 ), Color( 1, 0.9375, 0, 1 ), Color( 1, 1, 1, 1 ) ]
}
tracks/1/type = "value"
tracks/1/path = NodePath("Pivot/Sprite:position")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = {
"times": PoolRealArray( 0, 0.1, 0.15, 0.25 ),
"transitions": PoolRealArray( 1, 0.303143, 2.61003, 1 ),
"update": 0,
"values": [ Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 1.43051e-06, -1.90735e-06 ), Vector2( 0, -20 ), Vector2( 1.43051e-06, -1.90735e-06 ) ]
}
tracks/2/type = "value"
tracks/2/path = NodePath("Pivot/Sprite:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = {
"times": PoolRealArray( 0, 0.05, 0.15, 0.25 ),
"transitions": PoolRealArray( 1, 0.354553, 1, 1 ),
"update": 0,
"values": [ Vector2( 1, 1 ), Vector2( 1.20007, 0.917384 ), Vector2( 0.916712, 1.13495 ), Vector2( 1, 1 ) ]
}
[node name="Actor" type="Node2D"]
position = Vector2( 32, 32 )
z_index = 1
script = ExtResource( 1 )
__meta__ = {
"_edit_group_": true
}
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/bump = SubResource( 1 )
anims/walk = SubResource( 2 )
[node name="Tween" type="Tween" parent="."]
[node name="Pivot" type="Position2D" parent="."]
[node name="Sprite" type="Sprite" parent="Pivot"]
position = Vector2( 1.43051e-06, -1.90735e-06 )
texture = ExtResource( 2 )
centered = false
offset = Vector2( -32, -32 )

View File

@@ -1,55 +0,0 @@
extends "pawn.gd"
onready var grid = get_parent()
func _ready():
update_look_direction(Vector2.RIGHT)
func _process(_delta):
var input_direction = get_input_direction()
if not input_direction:
return
update_look_direction(input_direction)
var target_position = grid.request_move(self, input_direction)
if target_position:
move_to(target_position)
else:
bump()
func get_input_direction():
return Vector2(
Input.get_action_strength("move_right") - Input.get_action_strength("move_left"),
Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
)
func update_look_direction(direction):
$Pivot/Sprite.rotation = direction.angle()
func move_to(target_position):
set_process(false)
$AnimationPlayer.play("walk")
# Move the node to the target cell instantly,
# and animate the sprite moving from the start to the target cell
var move_direction = (target_position - position).normalized()
$Tween.interpolate_property($Pivot, "position", - move_direction * 32, Vector2(), $AnimationPlayer.current_animation_length, Tween.TRANS_LINEAR, Tween.EASE_IN)
position = target_position
$Tween.start()
# Stop the function execution until the animation finished
yield($AnimationPlayer, "animation_finished")
set_process(true)
func bump():
set_process(false)
$AnimationPlayer.play("bump")
yield($AnimationPlayer, "animation_finished")
set_process(true)

View File

@@ -1,5 +0,0 @@
extends Node2D
enum CellType { ACTOR, OBSTACLE, OBJECT }
#warning-ignore:unused_class_variable
export(CellType) var type = CellType.ACTOR

Binary file not shown.

Before

Width:  |  Height:  |  Size: 899 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 787 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,66 +0,0 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Grid Movement"
run/main_scene="res://Game.tscn"
config/icon="res://icon.png"
[display]
window/size/width=1280
window/size/height=720
window/stretch/mode="2d"
window/stretch/aspect="expand"
[input]
move_right={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
]
}
move_left={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
]
}
move_down={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
]
}
move_up={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
]
}
[rendering]
environment/default_environment="res://default_env.tres"

View File

@@ -1,19 +0,0 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://tilesets/grid/actor.png" type="Texture" id=1]
[ext_resource path="res://tilesets/grid/obstacle.png" type="Texture" id=2]
[ext_resource path="res://tilesets/grid/object.png" type="Texture" id=3]
[node name="Node2D" type="Node2D"]
[node name="Actor" type="Sprite" parent="."]
position = Vector2( 32, 32 )
texture = ExtResource( 1 )
[node name="Obstacle" type="Sprite" parent="."]
position = Vector2( 96, 32 )
texture = ExtResource( 2 )
[node name="Object" type="Sprite" parent="."]
position = Vector2( 160, 32 )
texture = ExtResource( 3 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,37 +0,0 @@
[gd_resource type="TileSet" load_steps=4 format=2]
[ext_resource path="res://tilesets/grid/actor.png" type="Texture" id=1]
[ext_resource path="res://tilesets/grid/obstacle.png" type="Texture" id=2]
[ext_resource path="res://tilesets/grid/object.png" type="Texture" id=3]
[resource]
0/name = "Actor"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 64, 64 )
0/is_autotile = false
0/occluder_offset = Vector2( 32, 32 )
0/navigation_offset = Vector2( 32, 32 )
0/shapes = [ ]
1/name = "Obstacle"
1/texture = ExtResource( 2 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 0, 0, 64, 64 )
1/is_autotile = false
1/occluder_offset = Vector2( 32, 32 )
1/navigation_offset = Vector2( 32, 32 )
1/shapes = [ ]
2/name = "Object"
2/texture = ExtResource( 3 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 0, 0, 64, 64 )
2/is_autotile = false
2/occluder_offset = Vector2( 32, 32 )
2/navigation_offset = Vector2( 32, 32 )
2/shapes = [ ]
_sections_unfolded = [ "0", "1" ]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 522 B

View File

@@ -1,34 +0,0 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/obstacle.png-9f01dd1d06d7b99515918b65b46bd6c1.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://tilesets/grid/obstacle.png"
dest_files=[ "res://.import/obstacle.png-9f01dd1d06d7b99515918b65b46bd6c1.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@@ -1,9 +0,0 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://tilesets/grid_lines/grid_lines.png" type="Texture" id=1]
[node name="TileSet" type="Node2D"]
[node name="Grass" type="Sprite" parent="."]
position = Vector2( 32, 32 )
texture = ExtResource( 1 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 530 B

View File

@@ -1,34 +0,0 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/grid_lines.png-beef853b47aa830c8383e5f6cc4d03ce.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://tilesets/grid_lines/grid_lines.png"
dest_files=[ "res://.import/grid_lines.png-beef853b47aa830c8383e5f6cc4d03ce.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@@ -1,16 +0,0 @@
[gd_resource type="TileSet" load_steps=2 format=2]
[ext_resource path="res://tilesets/grid_lines/grid_lines.png" type="Texture" id=1]
[resource]
0/name = "Grass"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 64, 64 )
0/is_autotile = false
0/occluder_offset = Vector2( 32, 32 )
0/navigation_offset = Vector2( 32, 32 )
0/shapes = [ ]

16
2d/hdr/README.md Normal file
View File

@@ -0,0 +1,16 @@
# HDR for 2D
Simple demo how to use High Dynamic Range (HDR) in a 2D game,
via the WorldEnvironment node.
Just slide the cave image left and right to observe the HDR effect at work.
Language: GDScript
Renderer: GLES 3 (HDR is not available in GLES 2)
## Screenshots
![Screenshot](screenshots/left.png)
![Screenshot](screenshots/right.png)

View File

@@ -4,7 +4,7 @@ const CAVE_LIMIT = 1000
onready var cave = $Cave
func _input(event):
func _unhandled_input(event):
if event is InputEventMouseMotion and event.button_mask > 0:
var rel_x = event.relative.x
var cavepos = cave.position

View File

@@ -16,6 +16,10 @@ _global_script_class_icons={
[application]
config/name="HDR for 2D"
config/description="Simple demo how to use High Dynamic Range (HDR) in a 2D game,
via the WorldEnvironment node.
Just slide the cave image left and right to observe the HDR effect at work."
run/main_scene="res://beach_cave.tscn"
config/icon="res://icon.png"
run/name=""

View File

BIN
2d/hdr/screenshots/left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

@@ -0,0 +1,11 @@
# Hexagonal Game
Very simple demo showing a hexagonal TileMap and TileSet.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/hex.png)

View File

@@ -16,9 +16,9 @@ _global_script_class_icons={
[application]
config/name="Hexagonal Game"
config/description="Very simple demo showing a hexagonal TileMap and TileSet."
run/main_scene="res://map.tscn"
config/icon="res://icon.png"
run/name=""
[display]
@@ -66,4 +66,5 @@ move_up={
[rendering]
quality/driver/driver_name="GLES2"
environment/default_clear_color=Color( 0.172549, 0.219608, 0.129412, 1 )

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

View File

@@ -1,12 +1,13 @@
extends KinematicBody2D
const MOTION_SPEED = 160 # Pixels/second
const MOTION_SPEED = 160 # Pixels/second.
const TAN30DEG = tan(deg2rad(30))
func _physics_process(_delta):
var motion = Vector2()
motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
motion.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
motion.y *= 0.5
motion.y *= TAN30DEG
motion = motion.normalized() * MOTION_SPEED
#warning-ignore:return_value_discarded
move_and_slide(motion)

View File

@@ -9,7 +9,7 @@ radius = 16.0
[node name="Troll" type="KinematicBody2D"]
script = ExtResource( 1 )
[node name="Sprite" type="Sprite" parent="."]
[node name="Sprite2D" type="Sprite" parent="."]
texture = ExtResource( 2 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]

12
2d/instancing/README.md Normal file
View File

@@ -0,0 +1,12 @@
# Instancing Demo
A demo showing how to use scene instancing to
make many duplicates of the same object.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/instancing.png)

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -16,6 +16,8 @@ _global_script_class_icons={
[application]
config/name="Scene Instancing Demo"
config/description="A demo showing how to use scene instancing to
make many duplicates of the same object."
run/main_scene="res://scene_instancing.tscn"
config/icon="res://icon.png"
@@ -35,4 +37,5 @@ singletons=[ ]
[rendering]
quality/driver/driver_name="GLES2"
environment/default_clear_color=Color( 0.301961, 0.301961, 0.301961, 1 )

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

24
2d/isometric/README.md Normal file
View File

@@ -0,0 +1,24 @@
# Isometric Game
This demo shows a traditional isometric view with depth sorting.
A character can move around the level and will also slide around objects,
as well as be occluded when standing in front or behind them.
Language: GDScript
Renderer: GLES 2
## How does it work?
The level uses a [`TileMap`](https://docs.godotengine.org/en/latest/classes/class_tilemap.html#class-tilemap)
in which the tiles have different vertical offsets.
The walls, doors, and pillars each have
[`StaticBody2D`](https://docs.godotengine.org/en/latest/classes/class_staticbody2d.html)
and [`CollisionPolygon2D`](https://docs.godotengine.org/en/latest/classes/class_collisionpolygon2d.html)
at their base. The player also has a collider at its base,
which makes the player collide with the level.
## Screenshots
![Screenshot](screenshots/isometric.png)

View File

@@ -10,8 +10,9 @@ mode = 1
tile_set = ExtResource( 1 )
cell_size = Vector2( 128, 64 )
cell_tile_origin = 1
centered_textures = true
format = 1
tile_data = PoolIntArray( -851956, 0, -1200553578, -851955, 0, -1200553578, -851954, 0, -1200553578, -786420, 1, -1200553578, -786419, 0, -1200553578, -786418, 0, -1200553578, -720884, 0, -1200553578, -720883, 0, -1200553578, -720882, 0, -1200553578, -655348, 1, -1200553578, -655347, 0, -1200553578, -655346, 0, -1200553578, -589812, 1, -1200553578, -589811, 0, -1200553578, -589810, 0, -1200553578, -524276, 0, -1200553578, -524275, 1, -1200553578, -524274, 0, -1200553578, -458740, 0, -1200553578, -458739, 0, -1200553578, -458738, 0, -1200553578, -393210, 0, -1200553578, -393209, 0, -1200553578, -393208, 0, -1200553578, -393207, 0, -1200553578, -393206, 0, -1200553578, -393205, 0, -1200553578, -393204, 0, -1200553578, -393203, 0, -1200553578, -393202, 0, -1200553578, -327674, 0, -1200553578, -327673, 0, -1200553578, -327672, 1, -1200553578, -327671, 1, -1200553578, -327670, 1, -1200553578, -327669, 1, -1200553578, -327668, 1, -1200553578, -327667, 0, -1200553578, -327666, 0, -1200553578, -262138, 0, -1200553578, -262137, 0, -1200553578, -262136, 0, -1200553578, -262135, 0, -1200553578, -262134, 0, -1200553578, -262133, 0, -1200553578, -262132, 0, -1200553578, -262131, 0, -1200553578, -262130, 0, -1200553578, -196602, 0, -1200553578, -196601, 0, -1200553578, -196600, 0, -1200553578, -196599, 0, -1200553578, -196598, 0, -1200553578, -196597, 0, -1200553578, -196596, 0, -1200553578, -196595, 0, -1200553578, -196594, 0, -1200553578, -131066, 0, -1200553578, -131065, 0, -1200553578, -131064, 0, -1200553578, -131063, 0, -1200553578, -65530, 0, -1200553578, -65529, 0, -1200553578, -65528, 0, -1200553578, -65527, 0, -1200553578, 6, 0, -1200553578, 7, 1, -1200553578, 8, 0, -1200553578, 9, 0, -1200553578, 65542, 0, -1200553578, 65543, 0, -1200553578, 65544, 0, -1200553578, 65545, 0, -1200553578, 131078, 0, -1200553578, 131079, 0, -1200553578, 131080, 0, -1200553578, 131081, 0, -1200553578, 196614, 0, -1200553578, 196615, 0, -1200553578, 196616, 0, -1200553578 )
tile_data = PoolIntArray( -917493, 0, 0, -917492, 0, 0, -917491, 0, 0, -917490, 0, 0, -851957, 0, 0, -851956, 0, 0, -851955, 0, 0, -851954, 0, 0, -786421, 0, 0, -786420, 1, 0, -786419, 0, -1200553578, -786418, 0, 0, -720885, 0, 0, -720884, 0, 0, -720883, 0, -1200553578, -720882, 0, 0, -655349, 0, 0, -655348, 1, 0, -655347, 0, -1200553578, -655346, 0, 0, -589813, 0, 0, -589812, 1, 0, -589811, 0, -1200553578, -589810, 0, 0, -524277, 0, 0, -524276, 0, 0, -524275, 1, -1200553578, -524274, 0, 0, -458747, 0, 0, -458746, 0, 0, -458745, 0, 0, -458744, 0, 0, -458743, 0, 0, -458742, 0, 0, -458741, 0, 0, -458740, 0, 0, -458739, 0, -1200553578, -458738, 0, 0, -393211, 0, 0, -393210, 0, 0, -393209, 0, 0, -393208, 0, 0, -393207, 0, 0, -393206, 0, 0, -393205, 0, 0, -393204, 0, 0, -393203, 0, -1200553578, -393202, 0, 0, -327675, 0, 0, -327674, 0, 0, -327673, 0, -1200553578, -327672, 1, -1200553578, -327671, 1, -1200553578, -327670, 1, 0, -327669, 1, 0, -327668, 1, 0, -327667, 0, -1200553578, -327666, 0, 0, -262139, 0, 0, -262138, 0, 0, -262137, 0, -1200553578, -262136, 0, -1200553578, -262135, 0, -1200553578, -262134, 0, -1200553578, -262133, 0, -1200553578, -262132, 0, -1200553578, -262131, 0, -1200553578, -262130, 0, 0, -196603, 0, 0, -196602, 0, 0, -196601, 0, -1200553578, -196600, 0, -1200553578, -196599, 0, 0, -196598, 0, 0, -196597, 0, 0, -196596, 0, 0, -196595, 0, 0, -196594, 0, 0, -131067, 0, 0, -131066, 0, 0, -131065, 0, -1200553578, -131064, 0, -1200553578, -131063, 0, 0, -65531, 0, 0, -65530, 0, 0, -65529, 0, -1200553578, -65528, 0, -1200553578, -65527, 0, 0, 5, 0, 0, 6, 0, 0, 7, 1, -1200553578, 8, 0, -1200553578, 9, 0, 0, 65541, 0, 0, 65542, 0, 0, 65543, 0, -1200553578, 65544, 0, -1200553578, 65545, 0, 0, 131077, 0, 0, 131078, 0, 0, 131079, 0, -1200553578, 131080, 0, -1200553578, 131081, 0, 0, 196613, 0, 0, 196614, 0, 0, 196615, 0, 0, 196616, 0, 0 )
[node name="Walls" type="TileMap" parent="."]
mode = 1
@@ -19,8 +20,9 @@ tile_set = ExtResource( 1 )
cell_size = Vector2( 128, 64 )
cell_tile_origin = 1
cell_y_sort = true
centered_textures = true
format = 1
tile_data = PoolIntArray( -917493, 2, -1200553578, -917492, 2, -1200553578, -917491, 2, -1200553578, -917490, 2, -1200553578, -917489, 2, -1200553578, -851957, 2, -1200553578, -851956, 3, -1200553578, -851954, 3, -1200553578, -851953, 2, -1200553578, -786421, 2, -1200553578, -786420, 3, -1200553578, -786418, 3, -1200553578, -786417, 2, -1200553578, -720885, 2, -1200553578, -720881, 2, -1200553578, -655349, 2, -1200553578, -655348, 2, -1200553578, -655346, 3, -1200553578, -655345, 2, -1200553578, -589813, 2, -1200553578, -589809, 2, -1200553578, -524277, 2, -1200553578, -524273, 2, -1200553578, -458747, 2, -1200553578, -458746, 2, -1200553578, -458745, 2, -1200553578, -458744, 536870916, -1200553578, -458743, 536870916, -1200553578, -458742, 2, -1200553578, -458741, 2, -1200553578, -458740, 2, -1200553578, -458738, 2, -1200553578, -458737, 2, -1200553578, -393211, 2, -1200553578, -393209, 3, -1200553578, -393205, 3, -1200553578, -393201, 2, -1200553578, -327675, 4, -1200553578, -327665, 2, -1200553578, -262139, 4, -1200553578, -262129, 2, -1200553578, -196603, 2, 0, -196601, 3, 0, -196593, 2, -1200553578, -131067, 2, 0, -131062, 2, -1200553578, -131061, 2, -1200553578, -131060, 2, -1200553578, -131059, 2, -1200553578, -131058, 2, -1200553578, -131057, 2, -1200553578, -65531, 2, 0, -65530, 2, 0, -65527, 2, -1200553578, -65526, 2, -1200553578, 5, 2, -1200553578, 10, 2, 0, 65541, 2, -1200553578, 65546, 2, 0, 131077, 2, -1200553578, 131081, 3, 0, 131082, 2, 0, 196613, 2, -1200553578, 196618, 2, 0, 262149, 2, -1200553578, 262150, 2, -1200553578, 262151, 2, -1200553578, 262152, 2, -1200553578, 262153, 2, -1200553578, 262154, 2, -1200553578 )
tile_data = PoolIntArray( -917493, 2, -1200553578, -917492, 2, -1200553578, -917491, 2, -1200553578, -917490, 2, -1200553578, -917489, 2, -1200553578, -851957, 2, -1200553578, -851956, 3, -1200553578, -851954, 3, -1200553578, -851953, 2, -1200553578, -786421, 2, -1200553578, -786420, 3, -1200553578, -786418, 3, -1200553578, -786417, 2, -1200553578, -720885, 2, -1200553578, -720881, 2, -1200553578, -655349, 2, -1200553578, -655348, 2, -1200553578, -655346, 3, -1200553578, -655345, 2, -1200553578, -589813, 2, -1200553578, -589809, 2, -1200553578, -524277, 2, -1200553578, -524273, 2, -1200553578, -458747, 2, -1200553578, -458746, 2, -1200553578, -458745, 2, -1200553578, -458744, 536870916, -1200553578, -458743, 536870916, -1200553578, -458742, 2, 0, -458741, 2, 0, -458740, 2, 0, -458738, 2, 0, -458737, 2, -1200553578, -393211, 2, -1200553578, -393209, 3, -1200553578, -393201, 2, -1200553578, -327675, 4, -1200553578, -327665, 2, -1200553578, -262139, 4, -1200553578, -262129, 2, -1200553578, -196603, 2, 0, -196601, 3, 0, -196593, 2, -1200553578, -131067, 2, 0, -131062, 2, -1200553578, -131061, 2, -1200553578, -131060, 2, -1200553578, -131059, 2, -1200553578, -131058, 2, -1200553578, -131057, 2, -1200553578, -65531, 2, 0, -65530, 2, 0, -65527, 2, -1200553578, -65526, 2, -1200553578, 5, 2, -1200553578, 10, 2, 0, 65541, 2, -1200553578, 65546, 2, 0, 131077, 2, -1200553578, 131081, 3, 0, 131082, 2, 0, 196613, 2, -1200553578, 196618, 2, 0, 262149, 2, -1200553578, 262150, 2, -1200553578, 262151, 2, -1200553578, 262152, 2, 0, 262153, 2, 0, 262154, 2, 0 )
[node name="Troll" parent="Walls" instance=ExtResource( 2 )]
position = Vector2( 368.142, 347.007 )

View File

@@ -16,6 +16,10 @@ _global_script_class_icons={
[application]
config/name="Isometric Game"
config/description="This demo shows a traditional isometric view with depth sorting.
A character can move around the level and will also slide around objects,
as well as be occluded when standing in front or behind them."
run/main_scene="res://dungeon.tscn"
config/icon="res://icon.png"
@@ -74,4 +78,5 @@ use_pixel_snap=true
[rendering]
quality/driver/driver_name="GLES2"
environment/default_clear_color=Color( 0.0784314, 0.105882, 0.145098, 1 )

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

View File

@@ -3,80 +3,103 @@
[ext_resource path="res://isotiles.png" type="Texture" id=1]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( -4, -30, 60, 2, -4, 34, -68, 2 )
points = PoolVector2Array( 0, -32, 64, 0, 0, 32, -64, 0 )
[sub_resource type="ConvexPolygonShape2D" id=2]
points = PoolVector2Array( -4, -22, 12, -22, 28, -6, 4, 10, -4, 10, -20, -6 )
points = PoolVector2Array( -24, -12, -10, -22, 10, -22, 24, -12, 24, 2, 10, 12, -10, 12, -24, 2 )
[sub_resource type="ConvexPolygonShape2D" id=3]
points = PoolVector2Array( -21.905, 23.3748, 50.095, -8.62516, 66.095, -0.62516, -5.90501, 31.3748 )
points = PoolVector2Array( -40, 16, 24, -16, 40, -8, -24, 24 )
[resource]
0/name = "Base"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( -66, -42 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 28, 92, 132, 84 )
0/region = Rect2( 28, 75, 135, 105 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/navigation_offset = Vector2( 0, 0 )
0/occluder_offset = Vector2( 67.5, 52.5 )
0/navigation_offset = Vector2( 67.5, 52.5 )
0/shape_offset = Vector2( 0, 0 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
0/shape_one_way = false
0/shape_one_way_margin = 0.0
0/shapes = [ ]
0/z_index = 0
1/name = "Base2"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( -66, -42 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 220, 92, 132, 84 )
1/region = Rect2( 221, 75, 135, 105 )
1/tile_mode = 0
1/occluder_offset = Vector2( 0, 0 )
1/navigation_offset = Vector2( 0, 0 )
1/occluder_offset = Vector2( 67.5, 52.5 )
1/navigation_offset = Vector2( 67.5, 52.5 )
1/shape_offset = Vector2( 0, 0 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
1/shape_one_way = false
1/shape_one_way_margin = 0.0
1/shapes = [ ]
1/z_index = 0
2/name = "Wall"
2/texture = ExtResource( 1 )
2/tex_offset = Vector2( -69.3109, -99.8051 )
2/tex_offset = Vector2( 0, -32 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 28, 220, 132, 136 )
2/region = Rect2( 28, 220, 140, 140 )
2/tile_mode = 0
2/occluder_offset = Vector2( 0, 0 )
2/navigation_offset = Vector2( 0, 0 )
2/occluder_offset = Vector2( 70, 70 )
2/navigation_offset = Vector2( 70, 70 )
2/shape_offset = Vector2( 70, 70 )
2/shape_transform = Transform2D( 1, 0, 0, 1, 70, 70 )
2/shape = SubResource( 1 )
2/shape_one_way = false
2/shape_one_way_margin = 1.0
2/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
"shape_transform": Transform2D( 1, 0, 0, 1, 70, 70 )
} ]
2/z_index = 0
3/name = "Column"
3/texture = ExtResource( 1 )
3/tex_offset = Vector2( -69.5632, -100.446 )
3/tex_offset = Vector2( 0, -32 )
3/modulate = Color( 1, 1, 1, 1 )
3/region = Rect2( 220, 220, 132, 136 )
3/region = Rect2( 259, 241, 55, 95 )
3/tile_mode = 0
3/occluder_offset = Vector2( 0, 0 )
3/navigation_offset = Vector2( 0, 0 )
3/occluder_offset = Vector2( 27.5, 47.5 )
3/navigation_offset = Vector2( 27.5, 47.5 )
3/shape_offset = Vector2( 29.5, 47.5 )
3/shape_transform = Transform2D( 1, 0, 0, 1, 29.5, 47.5 )
3/shape = SubResource( 2 )
3/shape_one_way = false
3/shape_one_way_margin = 1.0
3/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 2 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
"shape_transform": Transform2D( 1, 0, 0, 1, 29.5, 47.5 )
} ]
3/z_index = 0
4/name = "Door1"
4/texture = ExtResource( 1 )
4/tex_offset = Vector2( -50.3623, -90.8164 )
4/tex_offset = Vector2( 0, -25 )
4/modulate = Color( 1, 1, 1, 1 )
4/region = Rect2( 24, 408, 132, 136 )
4/region = Rect2( 54, 426, 85, 110 )
4/tile_mode = 0
4/occluder_offset = Vector2( 0, 0 )
4/navigation_offset = Vector2( 0, 0 )
4/occluder_offset = Vector2( 42.5, 55 )
4/navigation_offset = Vector2( 42.5, 55 )
4/shape_offset = Vector2( 42.5, 55 )
4/shape_transform = Transform2D( 1, 0, 0, 1, 42.5, 55 )
4/shape = SubResource( 3 )
4/shape_one_way = false
4/shape_one_way_margin = 1.0
4/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 3 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
"shape_transform": Transform2D( 1, 0, 0, 1, 42.5, 55 )
} ]
4/z_index = 0

View File

@@ -5,56 +5,49 @@
[node name="TilesetEdit" type="Node2D"]
[node name="Base" type="Sprite" parent="."]
position = Vector2( 150.049, 61.1264 )
texture = ExtResource( 1 )
centered = false
offset = Vector2( -66, -42 )
region_enabled = true
region_rect = Rect2( 28, 92, 132, 84 )
region_rect = Rect2( 28, 75, 135, 105 )
[node name="Base2" type="Sprite" parent="."]
position = Vector2( 257.013, 124.86 )
position = Vector2( 200, 0 )
texture = ExtResource( 1 )
centered = false
offset = Vector2( -66, -42 )
region_enabled = true
region_rect = Rect2( 220, 92, 132, 84 )
region_rect = Rect2( 221, 75, 135, 105 )
[node name="Wall" type="Sprite" parent="."]
position = Vector2( 421.311, 137.805 )
position = Vector2( 400, 0 )
texture = ExtResource( 1 )
centered = false
offset = Vector2( -69.3109, -99.8051 )
offset = Vector2( 0, -32 )
region_enabled = true
region_rect = Rect2( 28, 220, 132, 136 )
region_rect = Rect2( 28, 220, 140, 140 )
[node name="StaticBody2D" type="StaticBody2D" parent="Wall"]
[node name="collision" type="CollisionPolygon2D" parent="Wall/StaticBody2D"]
polygon = PoolVector2Array( -68, 2, -4, 34, 60, 2, -4, -30 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Wall/StaticBody2D"]
polygon = PoolVector2Array( -64, 0, 0, 32, 64, 0, 0, -32 )
[node name="Column" type="Sprite" parent="."]
position = Vector2( 359.563, 266.446 )
position = Vector2( 600, 0 )
texture = ExtResource( 1 )
centered = false
offset = Vector2( -69.5632, -100.446 )
offset = Vector2( 0, -32 )
region_enabled = true
region_rect = Rect2( 220, 220, 132, 136 )
region_rect = Rect2( 259, 241, 55, 95 )
[node name="StaticBody" type="StaticBody2D" parent="Column"]
[node name="StaticBody2D" type="StaticBody2D" parent="Column"]
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Column/StaticBody"]
polygon = PoolVector2Array( -20, -6, -4, 10, 4, 10, 28, -6, 12, -22, -4, -22 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Column/StaticBody2D"]
position = Vector2( 2, 0 )
polygon = PoolVector2Array( -24, 2, -10, 12, 10, 12, 24, 2, 24, -12, 10, -22, -10, -22, -24, -12 )
[node name="Door1" type="Sprite" parent="."]
position = Vector2( -24.1548, 142.216 )
position = Vector2( 800, 0 )
texture = ExtResource( 1 )
centered = false
offset = Vector2( -50.3623, -90.8164 )
offset = Vector2( 0, -25 )
region_enabled = true
region_rect = Rect2( 24, 408, 132, 136 )
region_rect = Rect2( 54, 426, 85, 110 )
[node name="StaticBody2D" type="StaticBody2D" parent="Door1"]
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Door1/StaticBody2D"]
polygon = PoolVector2Array( -5.90501, 31.3748, 66.095, -0.62516, 50.095, -8.62516, -21.905, 23.3748 )
polygon = PoolVector2Array( -24, 24, 40, -8, 24, -16, -40, 16 )

View File

@@ -1,12 +1,12 @@
extends KinematicBody2D
const MOTION_SPEED = 160 # Pixels/second
const MOTION_SPEED = 160 # Pixels/second.
func _physics_process(_delta):
var motion = Vector2()
motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
motion.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
motion.y *= 0.5
motion.y /= 2
motion = motion.normalized() * MOTION_SPEED
#warning-ignore:return_value_discarded
move_and_slide(motion)

View File

@@ -10,11 +10,10 @@ radius = 16.0
script = ExtResource( 1 )
[node name="Sprite" type="Sprite" parent="."]
position = Vector2( -3.94334, -36.924 )
position = Vector2( -4, -28 )
texture = ExtResource( 2 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2( -0.342697, -0.980721 )
shape = SubResource( 1 )
[node name="Camera2D" type="Camera2D" parent="."]

View File

@@ -0,0 +1,14 @@
# Kinematic Character 2D
Example of how to make a kinematic character controller in 2D using
[`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html).
The character moves around, is affected by moving platforms,
can jump through one-way collision platforms, etc.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/kinematic.png)

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/circle.png-10953cad44a8947fbdd4128a631e9e52.stex"
path="res://.import/circle.png-65a28e998f412b3cddff971e28b7d768.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://circle.png"
dest_files=[ "res://.import/circle.png-10953cad44a8947fbdd4128a631e9e52.stex" ]
source_file="res://level/circle.png"
dest_files=[ "res://.import/circle.png-65a28e998f412b3cddff971e28b7d768.stex" ]
[params]

View File

Before

Width:  |  Height:  |  Size: 480 B

After

Width:  |  Height:  |  Size: 480 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/long_obstacle.png-1b33440a15b4db156b2a9ec7e9a2a80e.stex"
path="res://.import/long_obstacle.png-d70ee394f796e1de9a423783aa84ec5d.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://long_obstacle.png"
dest_files=[ "res://.import/long_obstacle.png-1b33440a15b4db156b2a9ec7e9a2a80e.stex" ]
source_file="res://level/long_obstacle.png"
dest_files=[ "res://.import/long_obstacle.png-d70ee394f796e1de9a423783aa84ec5d.stex" ]
[params]

View File

Before

Width:  |  Height:  |  Size: 468 B

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex"
path="res://.import/obstacle.png-06287f6b2d26dd03335fd87ab78c2cc2.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://PaintTools.png"
dest_files=[ "res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex" ]
source_file="res://level/obstacle.png"
dest_files=[ "res://.import/obstacle.png-06287f6b2d26dd03335fd87ab78c2cc2.stex" ]
[params]

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