Compare commits

..

272 Commits

Author SHA1 Message Date
Aaron Franke
585455e67c Merge pull request #639 from aaronfranke/godot3.4
Upgrade demos to Godot 3.4
2021-11-05 13:01:54 -04:00
Aaron Franke
b7e0a470c7 Update demos to Godot 3.4 2021-11-05 11:48:47 -05:00
Aaron Franke
53ea602c07 Update README for the new 3.3 branch 2021-11-05 10:15:06 -05:00
Aaron Franke
874d3bcc33 Merge pull request #657 from Calinou/allow-fallback-gles2
Allow 3D demos to fallback to GLES2
2021-11-05 11:07:01 -04:00
Hugo Locurcio
cbb5c94c6f Allow 3D demos to fallback to GLES2
A GLES2-specific tweak is now documented for the GUI in 3D demo.

This also tweaks shadow quality and performance to find a better
balance and result in smoother shadows, including when using GLES2
(thanks to the use of PCF13 shadow filter mode).

In demos that allow falling back to GLES2, ETC1 texture import
is enabled to allow exporting to Android or HTML5 without having
to tweak anything.
2021-11-05 09:57:51 -05:00
Aaron Franke
44aefaecb6 Merge pull request #655 from Calinou/bullet-shower-no-check-collision-with-other-bullets
Don't check bullet collision with other bullets in the Bullet shower demo
2021-10-26 10:33:38 -04:00
Hugo Locurcio
7a7af4cf4e Don't check bullet collision with other bullets in the Bullet shower demo
This improves performance by reducing the number of collision checks
that need to be done.
2021-10-25 23:16:29 +02:00
Rémi Verschelde
1916f87ac5 Merge pull request #654 from aaronfranke/circlepop-noready 2021-10-15 21:54:09 +02:00
Aaron Franke
36e8b45bd4 Remove useless "_ready" in the Circle Pop demo 2021-10-15 14:35:14 -05:00
Rémi Verschelde
89b64e33e2 CI: Ping actions/checkout@v2, no need to be more specific 2021-10-15 21:20:16 +02:00
Gunnar Ahlberg
2b10e6724e Fix leaked object - Label (#648)
This fixes a warning of leaked instances.
2021-09-13 00:05:26 -05:00
Hugo Locurcio
b9685cb369 Merge pull request #645 from Calinou/use-remotesync-keyword
Use `remotesync` instead of the deprecated `sync` in networking demos
2021-08-29 17:09:25 +02:00
Hugo Locurcio
d1f25ca4aa Use remotesync instead of the deprecated sync in networking demos
The `sync` keyword has been deprecated since Godot 3.1.
2021-08-29 12:22:37 +02:00
Aaron Franke
11a72411cc Merge pull request #644 from Calinou/ci-update-to-godot-3.3.3
GitHub Actions: Update to Godot 3.3.3 for HTML5 deployment
2021-08-22 14:55:44 -05:00
Hugo Locurcio
5057fcff50 GitHub Actions: Update to Godot 3.3.3 for HTML5 deployment 2021-08-22 11:56:01 +02:00
Aaron Franke
d791cd9bda Merge pull request #643 from shahediqbal13/mono-iap-signal-mismatch
Google play billing method signature mismatch in demo with Godot's android billing plugin method
2021-08-18 18:46:42 -04:00
Shahed Iqbal
7d7c728227 Fixes following issues:
1. Google play billing method(OnGodotGooglePlayBilling_sku_details_query_error) signature in GooglePlayBilling class doesn't match with Godot's android library exposed method
Check: https://github.com/godotengine/godot-google-play-billing/blob/master/godot-google-play-billing/src/main/java/org/godotengine/godot/plugin/googleplaybilling/GodotGooglePlayBilling.java
Line: 236.

2. "OnConnectError" method signature mismatch
2021-08-19 03:23:44 +06:00
Aaron Franke
5fb81434e7 Merge pull request #642 from nathanfranke/opensimplexnoise-improvements
Simplify and improve OpenSimplexNoise viewer
2021-08-18 00:05:26 -04:00
Nathan Franke
c3c4fdf4fa Simplify and improve OpenSimplexNoise viewer 2021-08-17 23:02:55 -05:00
Aaron Franke
9ea18370d3 Add link to the Godot Asset Library for Skeleton2D 2021-08-17 21:03:15 -05:00
Aaron Franke
f9333dce01 Merge pull request #640 from shahediqbal13/mono-iap-signal-mismatch
Mono IAP signal method definition mismatch.
2021-08-17 21:24:11 -04:00
Aaron Franke
84a87a5128 Merge pull request #641 from aaronfranke/desc
Ensure most demos have descriptions and screenshots
2021-08-17 20:49:22 -04:00
Aaron Franke
7d64830cfe Ensure most demos have descriptions and screenshots 2021-08-16 21:13:06 -05:00
Shahed Iqbal
f08916c90f Mono IAP signal method definition mismatch. Updated OnPurchaseConsumptionError() method to match with GooglePlayBilling's signal 2021-08-15 02:48:05 +06:00
Aaron Franke
89978a7421 Merge pull request #636 from Powerbyte7/patch-1
Fix jumps in scale and rotation when pinching
2021-07-18 11:19:48 -07:00
Powerbyte7
6ca2a45a21 Fix jumps in scale and rotation when pinching
When pressing with two fingers at once and pinching,  an old coordinate contained in the curr_state dictionary gets added to the base_state dictionary, which causes unintended jumps in both scale and rotation. By clearing base_state the script functions as intended.
2021-07-18 17:00:59 +02:00
Agnis "NeZvērs" Aldiņš
57f8628b50 Update impact, rigid groundcheck, moving platform (#634) 2021-07-17 13:00:51 -04:00
Aaron Franke
a4e8231f5a Merge pull request #635 from aaronfranke/tweaks
Minor tweaks to Pong and Dodge the Creeps
2021-07-12 13:15:01 -07:00
Aaron Franke
f71816ed31 Minor tweaks to Pong and Dodge the Creeps 2021-07-11 13:08:01 -04:00
Aaron Franke
ef069d49ae Merge pull request #632 from aaronfranke/fsm-bullets
Fix bullets in the Finite State Machine demo
2021-07-06 20:34:41 -04:00
Aaron Franke
742ea87708 Merge pull request #633 from starptr/master
Use the Jump sound already present in the Platformer 2D demo
2021-07-06 20:32:50 -04:00
Yuto Nishida
45f5417822 Add jump sound effect 2021-07-06 16:40:15 -07:00
Aaron Franke
f28a09ea0d Fix bullets in the Finite State Machine demo 2021-07-05 01:09:50 -04:00
Aaron Franke
85c1805d33 Merge pull request #631 from aaronfranke/not
Use "not" instead of the exclamation mark in GDScript files
2021-07-05 01:00:28 -04:00
Aaron Franke
7e129db12e Use "not" instead of the exclamation mark in GDScript files
Also add String casts
2021-07-04 03:46:21 -04:00
Aaron Franke
7bfc57d1ae Merge pull request #628 from aaronfranke/skeleton2d
Add a Skeleton2D demo
2021-06-25 19:19:26 -04:00
Aaron Franke
cd48c9a9cc Add a Skeleton2D demo 2021-06-25 19:12:53 -04:00
Rémi Verschelde
244b759787 Merge pull request #627 from aaronfranke/no-builtin-e
Replace built-in scripts and delete strange "e" scripts
2021-06-21 20:57:16 +02:00
Aaron Franke
6875a21545 Replace built-in scripts and delete strange "e" scripts 2021-06-21 12:33:42 -04:00
Aaron Franke
694ee7fa36 Merge pull request #626 from aaronfranke/jrpg-simplify
Vastly simplify the JRPG demo
2021-06-21 12:22:44 -04:00
Aaron Franke
6e3db7c64d Vastly simplify the JRPG demo 2021-06-20 22:47:24 -04:00
Agnis "NeZvērs" Aldiņš
2d4d23302a 3D physics tests - Moving platform (#623) 2021-06-09 20:57:49 -04:00
Aaron Franke
4456027f91 Merge pull request #625 from aaronfranke/3d2d-robot
Simplify 3D robot in the 3D in 2D demo
2021-06-07 09:40:49 -04:00
Aaron Franke
19312b2899 Simplify 3D robot in the 3D in 2D demo 2021-06-06 23:28:53 -04:00
Aaron Franke
ca17967de1 Merge pull request #622 from aaronfranke/waypoint-camera-current
Have waypoints check if the camera is current
2021-05-29 03:19:57 -04:00
Aaron Franke
491fb265b1 Have waypoints check if the camera is current
If not, get the current camera.
2021-05-29 03:16:07 -04:00
Agnis "NeZvērs" Aldiņš
08be1b7f03 Additional 3D physics tests - RigidBody impact and ground check (#619)
Co-authored-by: Camille Mohr-Daurat <pouleyKetchoup@gmail.com>
2021-05-29 02:58:01 -04:00
Aaron Franke
4ef90a836a Merge pull request #621 from nellodotca/master
Fixed project settings to match tutorial
2021-05-24 21:09:43 -04:00
nello
bfd903a933 Fixed project settings to match tutorial 2021-05-24 19:14:12 -03:00
Aaron Franke
e0db0b8f6d Merge pull request #615 from nekomatata/physics-tests-draw-shape-clean
Fix hack to draw shapes in 3D physics tests
2021-05-19 15:45:22 -04:00
PouleyKetchoupp
4d21951b71 Fix hack to draw shapes in 3D physics tests
Using Shape::get_debug_mesh instead of the previous hack to draw a mesh
instance based on a collision shape.
2021-05-05 13:41:51 -07:00
Aaron Franke
7656c08454 Merge pull request #614 from aaronfranke/gridmap-perf
Improve performance in GridMap demos by adjusting octant size
2021-05-04 15:22:10 -04:00
Aaron Franke
e894e4655a Improve performance in GridMap demos 2021-05-04 02:48:32 -04:00
Aaron Franke
2ce76ff4e5 Update web deploy CI to use Godot 3.3 2021-04-24 04:20:39 -04:00
Aaron Franke
e5d829eb8f Merge pull request #613 from nekomatata/physics-tests-contacts-update
Update contact tests in physics tests for 2D & 3D
2021-04-24 02:32:19 -05:00
PouleyKetchoupp
7f025e000e Update contact tests in physics tests for 2D & 3D
- Create bodies by duplicating the ones from the scene to allow custom
settings on them for testing purpose
- Rename 3D test with multiple groups of bodies "Contact Islands"
instead of "Contacts Extended" for clarity
- Added "Contact Islands" test for 2D
- Fixed log spamming with "Contact Islands" tests due to printing log
messages for each group of bodies
- Added parameter to randomize spawn positions in order to make
contact separation more balanced (avoids artifacts like a huge column
for circles in 2D test)
- Using smaller shapes and larger amount of objects by default to test
more extreme case
2021-04-21 18:25:35 -07:00
Aaron Franke
5132941a84 Merge pull request #612 from nekomatata/physics-tests-3.3
Physics Tests 3.3 update
2021-04-21 19:51:44 -05:00
PouleyKetchoupp
ef265cca0a Physics Tests 3.3 update
Fix custom collision shape drawing in physics tests:
CollisionShape debug draw has changed in 3.3 and now requires a body
to be rendered, so the trick to display custom physics shapes in the
physics tests had to be updated.

Cylinder support:
Now cylinders are supported in Godot Physics, so the exception to avoid
spamming errors when cylinders are used can be removed.

Rigid body picking:
Added mouse-picking to Test Shapes in both 2D and 3D.
2021-04-21 16:50:33 -07:00
Aaron Franke
31bb09233b Update the OS test demo for Godot 3.3 2021-04-21 19:30:53 -04:00
Aaron Franke
57f5e0835d Merge pull request #558 from aaronfranke/update-3.2.4
Update projects to Godot 3.3
2021-04-21 18:20:01 -05:00
Aaron Franke
814909538f Update projects to Godot 3.3 2021-04-21 19:17:12 -04:00
Rémi Verschelde
94ec2ea5d9 Merge pull request #607 from aaronfranke/3.2-readme
Update README for the new 3.2 branch
2021-04-21 09:57:08 +02:00
Aaron Franke
40aec7c068 Update README for the new 3.2 branch 2021-04-14 13:46:19 -04:00
Aaron Franke
ead2777f48 Merge pull request #606 from nekomatata/physics-tests-contacts-update
Updated 2d/3d physics contact performance tests
2021-04-14 12:34:24 -05:00
PouleyKetchoupp
0a0d44d4f1 Updated 2d/3d physics contact performance tests 2021-04-14 08:19:10 -07:00
Aaron Franke
4911866f3d Merge pull request #604 from waimus/os_midi_scan_fix
Fix MIDI devices scanning
2021-04-05 16:51:00 -04:00
waimus
d7e1052205 Fix MIDI devices scanning 2021-04-06 03:10:33 +07:00
Aaron Franke
8e2dbf3f55 Merge pull request #602 from aaronfranke/etc
Use ETC instead of ETC2 for all GLES2 demos
2021-03-30 02:31:43 -04:00
Aaron Franke
2ee9b47f6c Use ETC instead of ETC2 for all GLES2 demos 2021-03-29 18:30:14 -04:00
Aaron Franke
d8dc94c1ff Merge pull request #601 from aaronfranke/ternary-volume
Use fewer ternary operators and decrease volume of Platformer 2D
2021-03-29 18:29:28 -04:00
Aaron Franke
d989bf6209 Use fewer ternary operators and decrease volume of Platformer 2D 2021-03-28 22:03:03 -04:00
Aaron Franke
021070215c Merge pull request #595 from dalexeev/bullet-shower-improve
Small improvement for Bullet Shower Demo
2021-03-26 20:20:31 -07:00
Aaron Franke
ac61cba05b Merge pull request #597 from aaronfranke/joy-24
Handle up to 24 joypad buttons in the Joypads demo
2021-03-15 04:34:12 -04:00
Aaron Franke
21e829416f Handle up to 24 joypad buttons in the Joypads demo 2021-03-13 23:28:22 -04:00
Danil Alexeev
cf7e4b31f4 Small improvement for Bullet Shower Demo 2021-03-13 21:04:13 +03:00
Aaron Franke
dc5c1016ce Merge pull request #594 from aaronfranke/assetlib-5c154da
Add links to the Asset Library after release 3.2-5c154da
2021-03-11 21:56:54 -08:00
Aaron Franke
8a0824a948 Add links to the Asset Library after release 3.2-5c154da
Also expand the CODEOWNERS file
2021-03-12 00:32:11 -05:00
Aaron Franke
5c154dac25 Merge pull request #593 from nekomatata/physics-tests-cancel-fix
Physics test cases, cancel previous running test properly
2021-03-09 18:49:38 -05:00
PouleyKetchoupp
7f095a6092 Physics test cases, cancel previous running test properly
Allows canceling running test cases (including all tests cases) properly and without error.
2021-03-08 12:27:13 -07:00
Aaron Franke
35687c3ead Merge pull request #592 from aaronfranke/kine-char-3d-pos
Set the reset position from the initial start position in KC3D
2021-03-03 14:55:35 -05:00
Aaron Franke
f91fe01f3e Set the reset position from the initial start position in KC3D 2021-03-03 14:41:44 -05:00
Aaron Franke
43d29bfbbb Merge pull request #591 from aaronfranke/misc
Misc improvements and tweaks for 3.2.3
2021-03-03 14:19:31 -05:00
Aaron Franke
7dff4e748d Merge pull request #590 from aaronfranke/kine-char-3d
Improve the Kinematic Character 3D demo
2021-03-03 14:18:33 -05:00
Aaron Franke
4913cd868a Misc fixes and tweaks 2021-03-03 02:59:17 -05:00
Aaron Franke
973c12264c Improve the Kinematic Character 3D demo 2021-03-03 02:55:05 -05:00
Aaron Franke
fecbed5fb2 Merge pull request #586 from Calinou/improve-demo-configuration
Improve several demos' configuration
2021-03-02 18:25:05 -05:00
Aaron Franke
82e68e378b Merge pull request #589 from Calinou/improve-3d-platformer-demo
Improve the 3D platformer demo
2021-03-02 18:22:31 -05:00
Aaron Franke
bbf4cff5f7 Merge pull request #588 from Calinou/readd-bullet-shower-demo
Port the Bullet Shower demo from Godot 2.1
2021-03-02 18:22:23 -05:00
Hugo Locurcio
3d6ba65cfc Improve the 3D platformer demo
- Increase gravity, player speed and air acceleration for a less floaty
  feeling.
- Clean up the code to use constants when relevant and remove unused enums.
2021-03-02 19:36:25 +01:00
Hugo Locurcio
ca0f74ee44 Port the Bullet Shower demo from Godot 2.1
This demo showcases how to use low-level Servers to achieve better
CPU performance when drawing large amounts of objects.

The code has been updated for Godot 3.2, cleaned up and has received
additional comments.
2021-03-02 18:32:01 +01:00
Hugo Locurcio
aa65867e43 Improve several demos' configuration
- Enable anisotropic filtering in 3D demos, and set the quality to
  16× on desktop and 4× on mobile.
- Enable 4× MSAA on some 3D demos that didn't use it beforehand.
- On GLES3 demos, disable MSAA on mobile as these demos are often
  more demanding.
- Use more conservative framebuffer allocation settings for better
  performance.
- Use PCF13 shadow filtering in GLES2 demos on desktop to benefit
  from soft shadows in Godot 3.2.4 and later.
  In Godot 3.2.3, this will make shadows smoother but still "blocky".
- Use Lossless compression instead of VRAM compression for
  small textures such as the voxel demo texture atlas.
2021-02-28 22:28:44 +01:00
Aaron Franke
c2e7a30e42 Merge pull request #587 from aaronfranke/web-readme
Link to the web export in the README and format names nicer
2021-02-28 16:18:29 -05:00
Aaron Franke
4dbfd92e6f Link to the web export in the README and format names nicer 2021-02-28 15:50:59 -05:00
Aaron Franke
c0d9e483c2 Merge pull request #582 from Calinou/deploy-html5-demos
Deploy exported HTML5 demos to GitHub Pages
2021-02-27 23:16:36 -05:00
Hugo Locurcio
36db05c3b9 Deploy exported HTML5 demos to GitHub Pages
This makes it possible for users to test Godot's features without
having to download anything.
2021-02-28 05:12:06 +01:00
ThomasFederau
fc032119ca Added interpolation functionality to ik_look_at node (#585) 2021-02-26 22:29:47 -05:00
Aaron Franke
98ed996780 Merge pull request #584 from nekomatata/physics-tests-2d-character-update
Updated 2D character controller physics tests
2021-02-26 09:25:58 -05:00
PouleyKetchoupp
fa83ee0277 Updated 2D character controller physics tests
Added new test for 2D character controller:
Character - Pixels
Functional test for pixel art related issues around KinematicBody and
RigidBody character controllers.

Adjusted existing tests and added more test cases to cover most use
cases from recent fixed issues and regressions for KinematicBody.

Added a more automated way to run all tests with checks to see which
ones failed in character controller tests.

Also fixed some minor issues with the log scrollbar.
2021-02-22 20:09:43 -07:00
Aaron Franke
7c137510e7 Merge pull request #583 from aaronfranke/trucktown-force-spedometer
Use a higher engine force when slow and add a spedometer in Truck Town
2021-02-22 21:46:03 -05:00
Aaron Franke
10a7e3d301 Use a higher engine force when slow and add a spedometer in Truck Town
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2021-02-22 13:56:17 -05:00
Aaron Franke
feaf406fee Merge pull request #581 from Calinou/truck-town-improve-controls-camera
Improve controls and camera handling in the Truck Town demo
2021-02-22 13:46:05 -05:00
Hugo Locurcio
d90e401d2a Improve controls and camera handling in the Truck Town demo
- Increase movement and steering speed significantly.
- Increase gravity slightly for a less floaty feeling.
- Simplify camera code (height is now constant).
- Tweaked camera distance and height to fit each vehicle.
- Fix script error when pressing Escape in the main menu
  (the demo will now quit).
2021-02-21 20:00:04 +01:00
Aaron Franke
99ad90bd0d Merge pull request #580 from Calinou/simplify-3d-scaling-setup
Simplify the 3D scaling demo setup, enable filtering by default
2021-02-12 23:57:49 -05:00
Hugo Locurcio
4adaaa2eb2 Simplify the 3D scaling demo setup, enable filtering by default
It turns out using a TextureRect node isn't necessary :)

The typical ViewportContainer + Viewport setup can be used just
fine to enable filtering on the ViewportTexture returned by the
Viewport.

The performance of the new method is equivalent to the old one.
2021-02-13 02:56:51 +01:00
Aaron Franke
b946d20762 Merge pull request #575 from Faless/joy/remap_wizard
[Joypads] Add SDL config re-mapping tool.
2021-02-07 16:24:18 -05:00
Fabio Alessandrelli
2a13307276 [Joypads] Add SDL config re-mapping tool.
Most of the code is in the remap folder, but it depends on the gamepad
diagram scene.
It allows remapping of pads to values that godot can understand.
It also comes with some default mapping for the HTML5 platform.
2021-02-07 13:19:18 +01:00
Aaron Franke
0b3e046953 Merge pull request #577 from nekomatata/physics-test-controllers
Add physics tests for 2D character controller
2021-01-22 20:01:39 -05:00
Aaron Franke
68e095c4d6 Merge pull request #578 from nekomatata/physics-tests-key-bindings
Changed key bindings in physics tests 2D/3D
2021-01-22 19:55:28 -05:00
PouleyKetchoupp
fe54ebbb3a Changed key bindings in physics tests 2D/3D
Changed debug collision shortcut from 'D' to 'C' to keep WASD available
for other functions in some tests.

Unbound arrows from UI shortcuts for the same reason.
2021-01-22 17:33:48 -07:00
PouleyKetchoupp
cdf0ed3be9 Add physics tests for 2D character controller
Two tests for character controller, with options to use RigidBody2D,
KinematicBody2D or KinematicBody2D with RayShape2D.

Tilemap: Tests for moving and jumping within tilemap blocks, with a
specific one-way collision test case scenario based on Block Climb Test
from https://github.com/madmiraal/godot-gym.

Slopes: Tests for moving and jumping in slopes, with different cases
based on snap and stop-on-slope parameters for kinematic bodies.
2021-01-22 17:24:28 -07:00
Aaron Franke
da9e24dfa7 Merge pull request #576 from nekomatata/physics-tests-broadphase-update
Update broadphase performance test in physics tests
2021-01-21 05:08:05 -05:00
PouleyKetchoupp
1c1ad17b43 Update broadphase performance test in physics tests
Start logging physics tick one frame earlier for each operation
Disable debug collision to avoid rendering bottleneck
Fixes in adding/removing bodies to avoid bottlenecks outside of physics
2D: Increase message queue size to allow adding more objects at once
3D: Remove camera to disable rendering altogether
3D: Fix error with create_rigidbody_box missing default value
2021-01-20 10:04:50 -07:00
Aaron Franke
5618c2b45a Merge pull request #574 from nekomatata/physics-tests-pause
Support for pause in 2D/3D physics tests
2021-01-06 23:56:36 -05:00
PouleyKetchoupp
3878948300 Support for pause in 2D/3D physics tests
New controls for all tests:
P to toggle pause on/off

Affects the running tests but not menus.
2021-01-06 21:25:34 -07:00
Aaron Franke
ca4cde1c26 Merge pull request #573 from nekomatata/physics-test-one-way-collision
Add One Way Collision for 2D Physics tests
2021-01-06 23:00:43 -05:00
PouleyKetchoupp
6a738c1ede Add One Way Collision for 2D Physics tests 2021-01-06 20:25:27 -07:00
Aaron Franke
04e9afb4cf Merge pull request #570 from aaronfranke/mr-k-inspired
Update the Drag and Drop demo and the Tween demo
2021-01-06 21:45:53 -05:00
Aaron Franke
e73af12f49 Script updates and simplification 2021-01-06 01:32:12 -05:00
Aaron Franke
6bdbeafca2 Update Tween demo to use Containers 2021-01-03 03:01:52 -06:00
Aaron Franke
21cbaafb2f Use a GridContainer in the Drag and Drop demo 2021-01-02 19:07:31 -06:00
Aaron Franke
35426410d5 Merge pull request #567 from aaronfranke/add-3d-waypoints-demo
Add a 3D waypoints demo
2021-01-02 14:47:30 -06:00
Hugo Locurcio
54a8d37e6c Add a 3D waypoints demo
Co-authored-by: Aaron Franke <arnfranke@yahoo.com>
2021-01-02 14:45:05 -06:00
Aaron Franke
d5dae1cbb7 Merge pull request #569 from aaronfranke/add-control-gallery-demo
Add a control gallery demo
2021-01-02 14:38:05 -06:00
Hugo Locurcio
06dc40ba65 Add a control gallery demo
This project showcases what Godot's various Control nodes can do
(and what they look like, so that new users can figure them out).
2021-01-02 00:39:59 -06:00
Aaron Franke
7c604f336d Merge pull request #568 from aaronfranke/2021
Update copyright statements for 2021
2021-01-01 22:30:54 -06:00
Aaron Franke
e3a31afe40 Update copyright statements for 2021 2021-01-01 21:49:36 -06:00
Aaron Franke
289d658baa Merge pull request #566 from nekomatata/physics-test-joints
Add joints test to 2D/3D physics tests
2020-12-31 01:22:21 -06:00
PouleyKetchoupp
7a437d1d23 Add joints test to 2D/3D physics tests 2020-12-30 20:15:08 -07:00
Aaron Franke
08e3f1efd0 Merge pull request #565 from aaronfranke/save-load-loading
Move Saving and Loading demo to Loading category
2020-12-30 14:23:10 -06:00
Aaron Franke
0d9c0d15c6 Move Saving and Loading demo to Loading category 2020-12-28 14:00:04 -06:00
Aaron Franke
96baaa09e3 Merge pull request #563 from aaronfranke/mr-k-platformer
Add a coin counter and pause menu fading to Platformer 2D
2020-12-28 13:48:22 -06:00
Mr.K GameDev
e004d2564e 2D Platformer UI Update
Co-authored-by: Aaron Franke <arnfranke@yahoo.com>
2020-12-26 23:35:45 -06:00
Aaron Franke
651ef54920 Merge pull request #562 from nekomatata/physics-tests-owner
Add PouleyKetchoupp to owners for physics tests
2020-12-19 11:59:55 -06:00
Aaron Franke
4a60286512 Merge pull request #561 from nekomatata/physics-test-collision-pairs
Add collision pairs test to 2D/3D physics tests
2020-12-19 11:59:26 -06:00
PouleyKetchoupp
1148a6bda0 Add PouleyKetchoupp to owners for physics tests 2020-12-19 10:46:18 -07:00
PouleyKetchoupp
9ad473c633 Add collision pairs test to 2D/3D physics tests
Functional test used for checking/debugging different collision cases for all possible pairs of shape types.
2020-12-18 20:51:54 -07:00
Aaron Franke
e38be6dec0 Merge pull request #560 from nekomatata/physics-tests-2d
Add 2D Physics Tests
2020-12-16 23:11:54 -05:00
PouleyKetchoupp
8241be5817 Add demo: Physics Tests 2D
Similar to its 3D counterpart, with tests using 2D physics.
2020-12-16 09:11:35 -07:00
Aaron Franke
1c836ecde9 Merge pull request #559 from nekomatata/physics-tests-3d-update
Fixes and adjustments in 3D physics tests
2020-12-14 20:36:01 -05:00
PouleyKetchoupp
6dd09308fa Fixes and adjustments in 3D physics tests
Add Functional Test / Stack & Pyramid
For testing stack stability.

Add Functional Test / Raycasts
Visually test raycast on different shapes.

Add Performance Test / Broadphase
Add/move/remove lots of non-colliding objects and measure time.

Fix leaks on exit
Some Nodes are copied and removed from the scene to be used as templates,
they need to be freed manually on exit.

Fix Performance Test / Contacts
Positions adjusted, some shape types were not created at the center.
2020-12-14 17:25:26 -07:00
Aaron Franke
555e43c896 Merge pull request #517 from Calinou/add-save-load-demo
Add a saving/loading demo with various serialization formats
2020-12-12 18:27:32 -05:00
Hugo Locurcio
2bd5b1c8ee Add a saving/loading demo with various serialization formats
This demo showcases how to save a simple game with ConfigFile and JSON.
2020-12-13 00:21:47 +01:00
Aaron Franke
14f2f1a713 Merge pull request #557 from aaronfranke/3din2d
Simplify 3D in 2D demo
2020-12-08 18:50:27 -05:00
Aaron Franke
3d9bcc6d97 Simplify 3D in 2D demo 2020-12-06 22:00:51 -05:00
Aaron Franke
3147c6c5bd Merge pull request #554 from aaronfranke/assetlib-5bd2bbf
Add links to the Asset Library after release 3.2-5bd2bbf
2020-11-28 23:31:51 -05:00
Aaron Franke
20a515153f Add links to the Asset Library after release 3.2-5bd2bbf 2020-11-28 23:21:06 -05:00
Aaron Franke
5bd2bbfda9 Merge pull request #553 from aaronfranke/iap-readme
Fix README files, especially in Android IAP demos
2020-11-28 22:19:31 -05:00
Aaron Franke
fc54dd9c23 Fix README files, especially in Android IAP demos 2020-11-28 22:05:39 -05:00
Aaron Franke
d38d18006b Merge pull request #551 from Calinou/networking-add-port-forward-help
Add instructions for port forwarding in the high-level multiplayer demos
2020-11-16 04:10:53 -05:00
Hugo Locurcio
6fd3e4d525 Add instructions for port forwarding in the high-level multiplayer demos
The instructions will only show when the player is hosting a server.
This also includes a button to get your public IP address.

This partially addresses #535.
2020-11-13 16:17:14 +01:00
Aaron Franke
2503599bed Merge pull request #543 from aaronfranke/mat-test-no-dae
Replace Collada .dae file with a Blend file in Material Testers demo
2020-10-30 15:40:04 -04:00
Aaron Franke
1aaa8e1fc6 Replace Collada .dae file with a Blend file
Also set material import mode to tres for test_bed.glb
2020-10-30 15:37:33 -04:00
Aaron Franke
2a98499935 Merge pull request #544 from aaronfranke/enums
Add trailing commas to enums
2020-10-30 15:35:51 -04:00
Aaron Franke
159adfd421 Add trailing commas to enums 2020-10-30 03:24:51 -04:00
Aaron Franke
4bba07257a Merge pull request #536 from aaronfranke/dtc-public
Change Dodge the Creeps to be more consistent with the docs
2020-10-21 01:50:46 -04:00
Aaron Franke
ae02236e50 Merge pull request #541 from Duroxxigar/mono-mp
Created C# networked Pong
2020-10-20 23:40:21 -04:00
Duroxxigar
3f8567f920 Created C# networked Pong 2020-10-20 23:18:57 -04:00
Aaron Franke
c7610e9334 Merge pull request #540 from jak-sdk/master
Re-write the navigation path-following code to be easier to read + add comments
2020-10-16 14:57:42 -04:00
Jak
78c7a48422 Re-write the 3d/navmesh demo to be easier to follow
The previous code had no comments and had some unintuitive steps.
I've re-written and re-structured it, and added comments. Hopefully it
will be easier to follow for newcomers to Godot.

 * Re-write main methods
 * Various bugfixes (variable conflicts, edge cases)
 * Comment improvements
 * Whitespace fixes

Co-authored-by: Aaron Franke <arnfranke@yahoo.com>
2020-10-16 19:41:28 +01:00
Aaron Franke
31d54a3540 Merge pull request #539 from jlosito/dependabot-configs
Check for updates to GitHub Actions every weekday
2020-10-15 15:40:46 -04:00
John Losito
2259303ee7 Check for updates to GitHub Actions every weekday 2020-10-13 18:21:32 -04:00
Aaron Franke
76c1d850fb Merge pull request #537 from aaronfranke/csproj-323
Update C# project files in C# demos for Godot 3.2.3
2020-10-12 19:45:10 -04:00
Aaron Franke
ebc79dec04 Update C# project files in C# demos for Godot 3.2.3 2020-10-11 03:20:03 -04:00
Aaron Franke
4af7fd5562 Change Dodge the Creeps to be more consistent with the docs 2020-10-10 16:26:23 -04:00
Aaron Franke
1a19c5c4e1 Merge pull request #533 from van800/dodge
Improve Dodge the Creeps demo
2020-10-08 12:07:50 -04:00
Ivan Shakhov
f8317d20d5 restore RootNamespace, since default one contains spaces, restore net472 after discussion with @neikeq and more testing 2020-10-08 16:29:41 +02:00
Aaron Franke
766cc97855 Merge pull request #532 from akien-mga/dodge-unused
Dodge the Creeps: Remove unused asset
2020-10-06 16:10:30 -04:00
Rémi Verschelde
136db0b25b Dodge the Creeps: Remove unused asset 2020-10-06 21:48:11 +02:00
Aaron Franke
aba0372718 Merge pull request #531 from van800/master
Update dodge_the_creeps to Godot 3.2.3 format
2020-10-06 05:58:43 -04:00
Ivan Shakhov
dd11042d95 fix Dodge the Creeps 2020-10-06 11:36:37 +02:00
Aaron Franke
4d205325ad Merge pull request #528 from aaronfranke/panel
Remove Panel nodes that don't have panels
2020-10-02 03:28:18 -04:00
Aaron Franke
0d1f16d073 Remove panel nodes that don't have panels
Replace with Control nodes
2020-10-01 23:46:50 -04:00
Aaron Franke
2c0cbbaed0 Merge pull request #525 from aaronfranke/gitignore-attr
Update gitignore for 4.x, add gitattributes, and update file format
2020-10-01 15:15:06 -04:00
Aaron Franke
918a289ee2 Format files using updated file_format.sh 2020-10-01 14:23:54 -04:00
Aaron Franke
fe9fd7d7e4 Update gitignore for 4.x and add gitattributes 2020-10-01 14:22:45 -04:00
Aaron Franke
c8149a703f Merge pull request #526 from aaronfranke/csharp-3.2.3
Update C# demos for Godot 3.2.3
2020-10-01 14:19:13 -04:00
Aaron Franke
2979f85185 Update C# demos for Godot 3.2.3 2020-10-01 02:45:18 -04:00
Aaron Franke
bc10b69d65 Merge pull request #524 from Calinou/allow-hidpi
Allow hiDPI in all demos that support multiple resolutions
2020-10-01 02:44:54 -04:00
Aaron Franke
f5960b2a7f Merge pull request #522 from Calinou/particles-add-flipbook-animation
Add a flipbook animation example to the 2D particles demo
2020-10-01 02:43:51 -04:00
Hugo Locurcio
fe6103256a Allow hiDPI in all demos that support multiple resolutions
This is required to benefit from crisp display on hiDPI monitors.
This also fixes issues related to fullscreen and input handling
when using an hiDPI display on Windows.
2020-10-01 00:56:12 +02:00
Hugo Locurcio
768346a092 Add a flipbook animation example to the 2D particles demo 2020-09-17 22:43:04 +02:00
Aaron Franke
7a84acea76 Merge pull request #521 from dbrookman/spelling-fix
Fix small spelling error
2020-09-16 11:57:48 -04:00
Daniel Brookman
c343b2f4f5 Fix small spelling error 2020-09-16 11:22:44 -04:00
Aaron Franke
9184a36ec1 Merge pull request #519 from aaronfranke/assetlib-links
Link to the asset library from the README of each demo
2020-09-11 13:51:45 -04:00
Aaron Franke
d4bf89d364 Link to the asset library from the README of each demo 2020-09-10 15:37:10 -04:00
Aaron Franke
f74f7c52b6 Merge pull request #514 from Calinou/remove-community-health-files
Remove funding information to use the @godotengine default
2020-09-01 01:30:39 -04:00
Hugo Locurcio
76df39ab2e Remove funding information to use the @godotengine default
The community health files are now available in the godotengine/.github
repository, which makes them apply to all repositories in the
organization automatically.

See https://github.com/godotengine/godot/issues/40972.
2020-08-27 15:57:32 +02:00
Aaron Franke
e4f69c3de0 Merge pull request #513 from Faless/net/free_while_emitting
Avoid freeing network peer during signal emission.
2020-08-23 16:22:51 -04:00
Fabio Alessandrelli
4fe1930aab Avoid freeing network peer during signal emission.
Always keep a reference to the last used peer even when removing it
from tree.
2020-08-23 20:12:27 +02:00
Aaron Franke
a582304ee7 Merge pull request #511 from Calinou/lights-and-shadows-normal-maps
Add a normal map test in the 2D lights and shadows demo
2020-08-19 16:13:46 -05:00
Hugo Locurcio
97e00544a9 Add a normal map test in the 2D lights and shadows demo
This was requested by lawnjelly so we can test whether normal map
orientation behaves as expected.
2020-08-18 14:22:04 +02:00
Aaron Franke
bc40a8d61d Merge pull request #510 from aaronfranke/dtc-meta
Fix minor problems with Dodge the Creeps metadata
2020-08-17 00:28:48 -05:00
Aaron Franke
4aae4f657b Fix minor problems with Dodge the Creeps metadata 2020-08-16 23:49:00 -05:00
Aaron Franke
78fe523b3c Merge pull request #508 from Calinou/3d-demos-tweak-settings
Tweak settings in various 3D demos
2020-08-16 23:44:05 -05:00
Hugo Locurcio
c6163b3d20 Tweak settings in various 3D demos
- Enable 4× MSAA in all 3D demos.
- Enable filmic tonemapping with a whitepoint of 6 in GLES3 3D demos.
- Add subtle fog to the Truck Town demo.
- Use the `2d` stretch mode and `expand` stretch aspect to support
  multiple resolutions and aspect ratios.
2020-08-17 03:25:13 +02:00
Aaron Franke
e30571c1ad Merge pull request #509 from aaronfranke/icons-images
Improve icons and optimize PNG images using oxipng
2020-08-16 19:12:52 -05:00
Aaron Franke
fcc7d5c723 Optimize PNG images using oxipng 2020-08-16 17:48:38 -05:00
Aaron Franke
50fb2071a0 Improve icon.png for projects using default icon 2020-08-15 17:25:12 -05:00
Aaron Franke
4b9a809912 Merge pull request #506 from Calinou/add-gui-theming-override-demo
Add a GUI theming override demo
2020-08-12 19:26:23 -05:00
Aaron Franke
68a2204c07 Merge pull request #507 from ricardoalcantara/mono_android_iap
Rewriting Mono Android IAP to match with GDScript
2020-08-12 19:25:21 -05:00
Ricardo Alcantara
6e98353ce3 Rewriting Mono Android IAP to match with GDScript
Version.
2020-08-12 21:08:51 -03:00
Aaron Franke
b5d4b277f4 Merge pull request #504 from ricardoalcantara/mono_android_iap
Android IAP Response Code can now return null.
2020-08-08 13:59:08 -05:00
Hugo Locurcio
6a325fb3a5 Add a GUI theming override demo
Overriding theme items is a common point of confusion. This demo
should hopefully make it easier to understand.

In the future, we could extend this demo to include things like theme
switching as it's a common need in non-game applications.
2020-08-04 13:14:53 +02:00
Aaron Franke
913de13ec9 Merge pull request #505 from pkruszynski/mobile-multitouch-view-fix
Mobile multitouch view fix
2020-08-03 21:20:30 -05:00
pkruszynski
f9c93b0d28 Fix for multitouch_view 2020-08-04 03:13:19 +01:00
Ricardo Alcantara
bc8dc740b5 Android IAP Response Code can now return null. 2020-07-28 19:26:19 -03:00
Aaron Franke
ddffbd7599 Merge pull request #498 from ricardoalcantara/mono_android_iap
Mono Android IAP Demo Project
2020-07-27 14:02:09 -04:00
Ricardo Alcantara
b718574112 Mono Android IAP Demo Project 2020-07-27 00:07:15 -03:00
Aaron Franke
ae2a97976a Merge pull request #500 from aaronfranke/ci-update
Tweak CI to more closely match the main repo
2020-07-25 00:01:18 -04:00
Aaron Franke
2c138bd75f Tweak CI to more closely match the main repo 2020-07-24 23:50:50 -04:00
Aaron Franke
b7b3a75389 Merge pull request #499 from smix8/master
3D NavMesh Demo - fix for navmesh (re)baking issue
2020-07-24 21:59:00 -04:00
smix8
28ec746545 fix for navmesh (re)baking issue
fix for navmesh (re)baking issues in demo
- changed level mesh size/scale (was way to small to be useable)
- changed navmesh agent settings (default radius to large, slope values to small)
2020-07-25 02:19:19 +02:00
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
1615 changed files with 26399 additions and 6918 deletions

16
.editorconfig Normal file
View File

@@ -0,0 +1,16 @@
# Top-most EditorConfig file.
root = true
# Unix-style newlines with a newline ending every file.
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
[*.cs]
csharp_space_after_cast = false
indent_size = 4
[*.csproj]
insert_final_newline = false
indent_size = 2

4
.gitattributes vendored Normal file
View File

@@ -0,0 +1,4 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
*.hdr binary

11
.github/CODEOWNERS vendored
View File

@@ -2,5 +2,12 @@
# 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
/.github/dist/ @Calinou
/3d/voxel/ @aaronfranke
/misc/matrix_transform/ @aaronfranke
/misc/2.5d/ @aaronfranke
/mono/2.5d/ @aaronfranke
/2d/physics_tests/ @pouleyKetchoupp
/3d/physics_tests/ @pouleyKetchoupp

2
.github/FUNDING.yml vendored
View File

@@ -1,2 +0,0 @@
patreon: godotengine
custom: https://godotengine.org/donate

View File

@@ -1,9 +1,9 @@
---
name: Bug Report
about: Report a bug with one of the demo projects.
title: ''
title: ""
labels: bug
assignees: ''
assignees: ""
---

View File

@@ -1,9 +1,9 @@
---
name: Feature / Enhancement Request
about: Adding new features or improving existing ones.
title: ''
title: ""
labels: enhancement
assignees: ''
assignees: ""
---

6
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

23
.github/dist/export_presets.cfg vendored Normal file
View File

@@ -0,0 +1,23 @@
[preset.0]
name="HTML5"
platform="HTML5"
runnable=true
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
script_export_mode=1
script_encryption_key=""
[preset.0.options]
custom_template/debug=""
custom_template/release=""
variant/export_type=0
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false
html/custom_html_shell=""
html/head_include=""
html/full_window_size=true

19
.github/dist/footer.html vendored Normal file
View File

@@ -0,0 +1,19 @@
<!-- The list of demos will be inserted above by the CI process. -->
</ul>
<h2>Unavailable demos</h2>
<ul>
<li><code>2d/hdr/</code>: Not supported on HTML5 yet.
<li><code>3d/voxel/</code>: Not supported on HTML5 yet.
<li><code>audio/device_changer/</code>: Not supported on HTML5 due to browser limitations.
<li><code>loading/background_load/</code>: Not supported on HTML5 yet.
<li><code>loading/multiple_threads_loading/</code>: Not supported on HTML5 yet.
<li><code>loading/threads/</code>: Not supported on HTML5 yet.
<li><code>misc/matrix_transform/</code>: Results are only visible in the editor.
<li><code>mobile/android_iap/</code>: Only relevant on native Android.
<li><code>mobile/sensors/</code>: Not supported on HTML5 yet.
<li><code>mono/*/</code>: Not available yet (requires Mono-enabled HTML5 build).</li>
<li><code>networking/*/</code>: Doesn't make sense to be hosted on a static host, as the server must be hosted on the same origin due to the browser's same-origin policy.</li>
<li><code>plugins/*/</code>: Only effective within the editor.</li>
</ul>
</body>
</html>

118
.github/dist/header.html vendored Normal file
View File

@@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Godot demos exported to HTML5</title>
<style>
:root {
--background-color: #fff;
--text-color: #222;
--link-color: hsl(220, 100%, 45%);
--link-underline-color: hsla(220, 100%, 45%, 0.3);
}
@media (prefers-color-scheme: dark) {
:root {
--background-color: #222;
--text-color: #eee;
--link-color: hsl(200, 100%, 70%);
--link-underline-color: hsla(200, 100%, 70%, 0.3);
}
}
*:focus {
/* More visible outline for better keyboard navigation. */
outline: 0.125rem solid hsl(220, 100%, 62.5%);
/* Make the outline always appear above other elements. */
position: relative;
}
html {
background-color: var(--background-color);
color: var(--text-color);
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
max-width: 50rem;
margin: 0 auto;
padding: 0.75rem;
line-height: 1.618rem;
}
h2 {
margin-top: 2.5rem;
}
a {
color: var(--link-color);
text-decoration-color: var(--link-underline-color);
text-decoration-thickness: 0.125rem;
}
a:hover {
filter: brightness(117.5%);
}
a:active {
filter: brightness(82.5%);
}
ul {
padding-left: 0;
}
li {
display: block;
}
li a {
display: inline-block;
width: 100%;
height: 4rem;
margin-left: 0.5rem;
}
li a:hover {
background-color: hsla(0, 0%, 50%, 0.1);
}
li a * {
float: left;
}
li a p {
height: 24px;
margin: 20px 10px;
}
</style>
</head>
<body>
<h1>Godot demo projects</h1>
<p>
This page lists
<a href="https://github.com/godotengine/godot-demo-projects">official Godot demo projects</a>
exported to HTML5 for testing purposes. These projects are deployed automatically
on every commit on the <code>master</code> branch of the repository.
</p>
<p>
The HTML5 exports on this page are provided for demonstration purposes only.
Some of these demos may not function or render correctly on HTML5,
especially on mobile devices.
For best performance, it's recommended to
<a href="https://godotengine.org/download">download</a> a native editor
and run the demo project by importing its files in the project manager.
</p>
<p>
See the
<a href="https://docs.godotengine.org/en/stable/getting_started/workflow/export/exporting_for_web.html">Exporting for the Web</a>
documentation for information on exporting your own projects to HTML5.
</p>
<h2>List of demos</h2>
<ul>
<!-- The list of demos will be inserted below by the CI process. -->

99
.github/workflows/export_html5.yml vendored Normal file
View File

@@ -0,0 +1,99 @@
name: Export projects to HTML5 and deploy to GitHub Pages
on:
push:
branches:
- master
env:
GODOT_VERSION: 3.3.3
jobs:
export-html5:
name: Export projects to HTML5 and deploy to GitHub Pages
runs-on: ubuntu-20.04
container:
image: barichello/godot-ci:3.3.3
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup
run: |
mkdir -p ~/.local/share/godot/templates/
mv /root/.local/share/godot/templates/$GODOT_VERSION.stable ~/.local/share/godot/templates/$GODOT_VERSION.stable
- name: Export projects to HTML5
run: |
apt-get update -qq && apt-get install -qqq imagemagick
# Don't export Mono demos (not supported yet), demos that can't be run in HTML5
# since they're platform-specific or demos that are currently broken in HTML5.
# Remember to update `.github/dist/footer.html` when updating the list of excluded demos.
rm -rf \
2d/hdr/ \
3d/voxel/ \
audio/device_changer/ \
loading/background_load/ \
loading/multiple_threads_loading/ \
loading/threads/ \
misc/matrix_transform/ \
mobile/android_iap/ \
mobile/sensors/ \
mono/ \
networking/ \
plugins/
for panorama in 3d/material_testers/backgrounds/*.hdr; do
# Decrease the resolution to get below the 20 MB per-file limit.
# Otherwise, the website can't be deployed as files larger than 20 MB
# can't be pushed to GitHub anymore.
mogrify -resize 75% "$panorama"
done
BASEDIR="$PWD"
# Use absolute paths so that we can `cd` without having to go back to the parent directory manually.
for demo in */*/; do
echo ""
echo "================================"
echo "Exporting demo $demo..."
echo "================================"
mkdir -p "$BASEDIR/.github/dist/$demo"
cd "$BASEDIR/$demo"
# Copy an export template preset file configured for HTML5 exporting.
# This way, we don't have to commit `export_presets.cfg` for each project.
cp "$BASEDIR/.github/dist/export_presets.cfg" .
godot --export "HTML5" "$BASEDIR/.github/dist/$demo/index.html"
# Replace the WASM file with a symbolic link to avoid duplicating files in the pushed branch.
# (WASM files are identical across projects, but not PCK or HTML files.)
mv -f "$BASEDIR/.github/dist/$demo/index.wasm" "$BASEDIR/.github/dist/index.wasm"
# The symlink must be relative as it needs to point to a file within the pushed repository.
ln -s "../../index.wasm" "$BASEDIR/.github/dist/$demo/index.wasm"
# Append the demo to the list of demos for the website.
PROJECT_NAME=$(cat project.godot | grep "config/name" | cut -d '"' -f 2 | tr -d "\n")
echo "<li><a href='$demo'><img width="64" height="64" src="$demo/favicon.png" alt=""><p>$PROJECT_NAME</p></a></li>" >> "$BASEDIR/.github/dist/demos.html"
done
cat "$BASEDIR/.github/dist/header.html" "$BASEDIR/.github/dist/demos.html" "$BASEDIR/.github/dist/footer.html" > "$BASEDIR/.github/dist/index.html"
# Clean up files that don't need to be deployed.
rm -f "$BASEDIR/.github/dist/header.html" "$BASEDIR/.github/dist/demos.html" "$BASEDIR/.github/dist/footer.html" "$BASEDIR/.github/dist/export_presets.cfg"
# Installing rsync is needed in order to deploy to GitHub Pages. Without it, the build will fail.
- name: Install rsync 📚
run: |
apt-get update -qq && apt-get install -qqq rsync
- name: Deploy to GitHub Pages 🚀
uses: JamesIves/github-pages-deploy-action@releases/v3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# The branch the action should deploy to.
BRANCH: gh-pages
# The folder the action should deploy.
FOLDER: .github/dist
# Artifacts are large; don't keep the branch's history.
SINGLE_COMMIT: true

19
.github/workflows/static_checks.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
name: Static Checks
on: [push, pull_request]
jobs:
format:
name: File formatting (file_format.sh)
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq dos2unix recode
- name: File formatting checks (file_format.sh)
run: |
bash ./file_format.sh

9
.gitignore vendored
View File

@@ -1,10 +1,19 @@
# Godot 4+ specific ignores
.godot/
# Godot-specific ignores
.import/
export.cfg
export_presets.cfg
# Dummy HTML5 export presets file for continuous integration
!.github/dist/export_presets.cfg
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
# System/tool-specific ignores

View File

@@ -1,18 +0,0 @@
dist: bionic
stages:
- build
matrix:
include:
- name: Static checks (format.sh)
stage: build
os: linux
addons:
apt:
packages:
- dos2unix
- recode
script:
- bash ./format.sh

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/shaders/shader_reference/shading_language.html)
Renderers: 6 of them are GLES 3, but most are GLES 2

View File

@@ -0,0 +1,20 @@
# Bullet Shower
This demonstrates how to manage large amounts of objects efficiently using
low-level Servers.
See
[Optimization using Servers](https://docs.godotengine.org/en/latest/tutorials/performance/using_servers.html)
in the documentation for more information.
Language: GDScript
Renderer: GLES 2
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/887
## Screenshots
![No collision](screenshots/no_collision.png)
![Collision](screenshots/collision.png)

BIN
2d/bullet_shower/bullet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/sprite.png-e28cedc69371816a3468e6325b327ece.stex"
path="res://.import/bullet.png-ff1424653e10246c11e3724e402c519e.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://grid_movement/pawns/sprite.png"
dest_files=[ "res://.import/sprite.png-e28cedc69371816a3468e6325b327ece.stex" ]
source_file="res://bullet.png"
dest_files=[ "res://.import/bullet.png-ff1424653e10246c11e3724e402c519e.stex" ]
[params]
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true

View File

@@ -0,0 +1,93 @@
extends Node2D
# This demo is an example of controling a high number of 2D objects with logic
# and collision without using nodes in the scene. This technique is a lot more
# efficient than using instancing and nodes, but requires more programming and
# is less visual. Bullets are managed together in the `bullets.gd` script.
const BULLET_COUNT = 500
const SPEED_MIN = 20
const SPEED_MAX = 80
const bullet_image = preload("res://bullet.png")
var bullets = []
var shape
class Bullet:
var position = Vector2()
var speed = 1.0
# The body is stored as a RID, which is an "opaque" way to access resources.
# With large amounts of objects (thousands or more), it can be significantly
# faster to use RIDs compared to a high-level approach.
var body = RID()
func _ready():
randomize()
shape = Physics2DServer.circle_shape_create()
# Set the collision shape's radius for each bullet in pixels.
Physics2DServer.shape_set_data(shape, 8)
for _i in BULLET_COUNT:
var bullet = Bullet.new()
# Give each bullet its own speed.
bullet.speed = rand_range(SPEED_MIN, SPEED_MAX)
bullet.body = Physics2DServer.body_create()
Physics2DServer.body_set_space(bullet.body, get_world_2d().get_space())
Physics2DServer.body_add_shape(bullet.body, shape)
# Don't make bullets check collision with other bullets to improve performance.
# Their collision mask is still configured to the default value, which allows
# bullets to detect collisions with the player.
Physics2DServer.body_set_collision_layer(bullet.body, 0)
# Place bullets randomly on the viewport and move bullets outside the
# play area so that they fade in nicely.
bullet.position = Vector2(
rand_range(0, get_viewport_rect().size.x) + get_viewport_rect().size.x,
rand_range(0, get_viewport_rect().size.y)
)
var transform2d = Transform2D()
transform2d.origin = bullet.position
Physics2DServer.body_set_state(bullet.body, Physics2DServer.BODY_STATE_TRANSFORM, transform2d)
bullets.push_back(bullet)
func _process(_delta):
# Order the CanvasItem to update every frame.
update()
func _physics_process(delta):
var transform2d = Transform2D()
var offset = get_viewport_rect().size.x + 16
for bullet in bullets:
bullet.position.x -= bullet.speed * delta
if bullet.position.x < -16:
# The bullet has left the screen; move it back to the right.
bullet.position.x = offset
transform2d.origin = bullet.position
Physics2DServer.body_set_state(bullet.body, Physics2DServer.BODY_STATE_TRANSFORM, transform2d)
# Instead of drawing each bullet individually in a script attached to each bullet,
# we are drawing *all* the bullets at once here.
func _draw():
var offset = -bullet_image.get_size() * 0.5
for bullet in bullets:
draw_texture(bullet_image, bullet.position + offset)
# Perform cleanup operations (required to exit without error messages in the console).
func _exit_tree():
for bullet in bullets:
Physics2DServer.free_rid(bullet.body)
Physics2DServer.free_rid(shape)
bullets.clear()

Binary file not shown.

After

Width:  |  Height:  |  Size: 907 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex"
path="res://.import/face_happy.png-38d387d31ec13459f749c93ce3d75d80.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://PaintTools.png"
dest_files=[ "res://.import/PaintTools.png-636e86a6d210b52282c946752bbcc6f1.stex" ]
source_file="res://face_happy.png"
dest_files=[ "res://.import/face_happy.png-38d387d31ec13459f749c93ce3d75d80.stex" ]
[params]
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/obstacle.png-303025fbfb0bdc414a247e8ee1624a90.stex"
path="res://.import/face_sad.png-0ac7165eab24f595aba17a746a66c550.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://grid_movement/tilesets/grid/obstacle.png"
dest_files=[ "res://.import/obstacle.png-303025fbfb0bdc414a247e8ee1624a90.stex" ]
source_file="res://face_sad.png"
dest_files=[ "res://.import/face_sad.png-0ac7165eab24f595aba17a746a66c550.stex" ]
[params]
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true

BIN
2d/bullet_shower/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

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

View File

@@ -0,0 +1,33 @@
extends Node2D
# This demo is an example of controling a high number of 2D objects with logic
# and collision without using nodes in the scene. This technique is a lot more
# efficient than using instancing and nodes, but requires more programming and
# is less visual. Bullets are managed together in the `bullets.gd` script.
# The number of bullets currently touched by the player.
var touching = 0
onready var sprite = $AnimatedSprite
func _ready():
# The player follows the mouse cursor automatically, so there's no point
# in displaying the mouse cursor.
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
func _input(event):
if event is InputEventMouseMotion:
position = event.position - Vector2(0, 16)
func _on_body_shape_entered(_body_id, _body, _body_shape, _local_shape):
touching += 1
if touching >= 1:
sprite.frame = 1
func _on_body_shape_exited(_body_id, _body, _body_shape, _local_shape):
touching -= 1
if touching == 0:
sprite.frame = 0

View File

@@ -0,0 +1,40 @@
; 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="Bullet Shower"
config/description="Demonstrates how to manage large amounts of objects efficiently using low-level Servers."
run/main_scene="res://shower.tscn"
config/icon="res://icon.png"
[display]
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="expand"
[physics]
common/enable_pause_aware_picking=true
2d/cell_size=64
[rendering]
quality/driver/driver_name="GLES2"
quality/intended_usage/framebuffer_allocation=0
quality/intended_usage/framebuffer_allocation.mobile=0
vram_compression/import_etc=true
vram_compression/import_etc2=false
environment/default_clear_color=Color( 0.133333, 0.133333, 0.2, 1 )

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@@ -0,0 +1,34 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://bullets.gd" type="Script" id=2]
[ext_resource path="res://face_happy.png" type="Texture" id=3]
[ext_resource path="res://face_sad.png" type="Texture" id=4]
[ext_resource path="res://player.gd" type="Script" id=5]
[sub_resource type="SpriteFrames" id=1]
animations = [ {
"frames": [ ExtResource( 3 ), ExtResource( 4 ) ],
"loop": true,
"name": "default",
"speed": 5.0
} ]
[sub_resource type="CircleShape2D" id=2]
radius = 27.0
[node name="Shower" type="Node2D"]
[node name="Bullets" type="Node2D" parent="."]
script = ExtResource( 2 )
[node name="Player" type="Area2D" parent="."]
script = ExtResource( 5 )
[node name="AnimatedSprite" type="AnimatedSprite" parent="Player"]
frames = SubResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Player"]
shape = SubResource( 2 )
[connection signal="body_shape_entered" from="Player" to="Player" method="_on_body_shape_entered"]
[connection signal="body_shape_exited" from="Player" to="Player" method="_on_body_shape_exited"]

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

@@ -53,5 +53,6 @@ text = "Start"
[node name="MessageTimer" type="Timer" parent="."]
one_shot = true
[connection signal="pressed" from="StartButton" to="." method="_on_StartButton_pressed"]
[connection signal="timeout" from="MessageTimer" to="." method="_on_MessageTimer_timeout"]

View File

@@ -1,6 +1,6 @@
extends Node
export (PackedScene) var Mob
export(PackedScene) var mob_scene
var score
func _ready():
@@ -16,6 +16,7 @@ func game_over():
func new_game():
get_tree().call_group("mobs", "queue_free")
score = 0
$Player.start($StartPosition.position)
$StartTimer.start()
@@ -25,14 +26,27 @@ func new_game():
func _on_MobTimer_timeout():
$MobPath/MobSpawnLocation.offset = randi()
var mob = Mob.instance()
# Choose a random location on Path2D.
var mob_spawn_location = get_node("MobPath/MobSpawnLocation")
mob_spawn_location.offset = randi()
# Create a Mob instance and add it to the scene.
var mob = mob_scene.instance()
add_child(mob)
var direction = $MobPath/MobSpawnLocation.rotation + PI / 2
mob.position = $MobPath/MobSpawnLocation.position
# Set the mob's direction perpendicular to the path direction.
var direction = mob_spawn_location.rotation + PI / 2
# Set the mob's position to a random location.
mob.position = mob_spawn_location.position
# Add some randomness to the direction.
direction += rand_range(-PI / 4, PI / 4)
mob.rotation = direction
mob.linear_velocity = Vector2(rand_range(mob.min_speed, mob.max_speed), 0).rotated(direction)
# Choose the velocity for the mob.
var velocity = Vector2(rand_range(150.0, 250.0), 0.0)
mob.linear_velocity = velocity.rotated(direction)
func _on_ScoreTimer_timeout():

View File

@@ -14,7 +14,7 @@ _data = {
[node name="Main" type="Node"]
script = ExtResource( 1 )
Mob = ExtResource( 2 )
mob_scene = ExtResource( 2 )
[node name="ColorRect" type="ColorRect" parent="."]
anchor_right = 1.0
@@ -47,6 +47,7 @@ stream = ExtResource( 5 )
[node name="DeathSound" type="AudioStreamPlayer" parent="."]
stream = ExtResource( 6 )
[connection signal="hit" from="Player" to="." method="game_over"]
[connection signal="timeout" from="MobTimer" to="." method="_on_MobTimer_timeout"]
[connection signal="timeout" from="ScoreTimer" to="." method="_on_ScoreTimer_timeout"]

View File

@@ -1,11 +1,8 @@
extends RigidBody2D
#warning-ignore-all:unused_class_variable
export var min_speed = 150
export var max_speed = 250
var mob_types = ["walk", "swim", "fly"]
func _ready():
$AnimatedSprite.playing = true
var mob_types = $AnimatedSprite.frames.get_animation_names()
$AnimatedSprite.animation = mob_types[randi() % mob_types.size()]

View File

@@ -15,22 +15,22 @@ animations = [ {
"name": "fly",
"speed": 3.0
}, {
"frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
"loop": true,
"name": "walk",
"speed": 4.0
}, {
"frames": [ ExtResource( 6 ), ExtResource( 7 ) ],
"loop": true,
"name": "swim",
"speed": 4.0
}, {
"frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
"loop": true,
"name": "walk",
"speed": 4.0
} ]
[sub_resource type="CapsuleShape2D" id=2]
radius = 35.2706
height = 23.3281
[node name="Mob" type="RigidBody2D"]
[node name="Mob" type="RigidBody2D" groups=["mobs"]]
collision_mask = 0
gravity_scale = 0.0
script = ExtResource( 1 )
@@ -42,12 +42,11 @@ __meta__ = {
scale = Vector2( 0.75, 0.75 )
frames = SubResource( 1 )
animation = "walk"
frame = 1
playing = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
rotation = 1.5708
shape = SubResource( 2 )
[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."]
[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"]

View File

@@ -2,8 +2,8 @@ extends Area2D
signal hit
export var speed = 400
var screen_size
export var speed = 400 # How fast the player will move (pixels/sec).
var screen_size # Size of the game window.
func _ready():
screen_size = get_viewport_rect().size
@@ -11,15 +11,22 @@ func _ready():
func _process(delta):
var velocity = Vector2()
velocity.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
velocity.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
var velocity = Vector2.ZERO # The player's movement vector.
if Input.is_action_pressed("move_right"):
velocity.x += 1
if Input.is_action_pressed("move_left"):
velocity.x -= 1
if Input.is_action_pressed("move_down"):
velocity.y += 1
if Input.is_action_pressed("move_up"):
velocity.y -= 1
if velocity.length() > 0:
velocity = velocity.normalized() * speed
$AnimatedSprite.play()
else:
$AnimatedSprite.stop()
position += velocity * delta
position.x = clamp(position.x, 0, screen_size.x)
position.y = clamp(position.y, 0, screen_size.y)
@@ -40,6 +47,7 @@ func start(pos):
func _on_Player_body_entered(_body):
hide()
hide() # Player disappears after being hit.
emit_signal("hit")
# Must be deferred as we can't change physics properties on a physics callback.
$CollisionShape2D.set_deferred("disabled", true)

View File

@@ -67,4 +67,5 @@ speed_scale = 2.0
local_coords = false
process_material = SubResource( 7 )
texture = ExtResource( 2 )
[connection signal="body_entered" from="." to="." method="_on_Player_body_entered"]

View File

@@ -14,14 +14,20 @@ 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).
Note: There is a GDNative C++ version available [here](https://github.com/godotengine/gdnative-demos/tree/master/cpp/dodge_the_creeps).
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/515
## Screenshots
![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif)
## Licenses
![Screenshot](screenshots/dodge.png)
## 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". Copyright &copy; 2010-2020 kenney.nl, [CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0/). Source: https://www.kenney.nl/assets/abstract-platformer
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`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

0
2d/dodge_the_creeps/fonts/FONTLOG.txt Executable file → Normal file
View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

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

View File

@@ -8,11 +8,6 @@
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Dodge the Creeps"
@@ -20,8 +15,8 @@ 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."
tutorial in the documentation. For more details, consider
following the tutorial in the documentation."
run/main_scene="res://Main.tscn"
config/icon="res://icon.png"
@@ -29,42 +24,40 @@ config/icon="res://icon.png"
window/size/width=480
window/size/height=720
window/stretch/mode="2d"
window/stretch/aspect="keep"
[input]
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":16777231,"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":65,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
]
}
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":16777233,"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":68,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"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":16777232,"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":87,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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)
]
}
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":16777234,"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":83,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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)
]
}
[rendering]
environment/default_environment="res://default_env.tres"

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,15 +1,50 @@
[gd_scene load_steps=5 format=2]
[gd_scene load_steps=6 format=2]
[ext_resource path="res://player/Player.tscn" type="PackedScene" id=1]
[ext_resource path="res://debug/Explanations.tscn" type="PackedScene" id=2]
[ext_resource path="res://fonts/source_code_pro_explanations.tres" type="DynamicFont" id=2]
[ext_resource path="res://debug/StatesStackDiplayer.tscn" type="PackedScene" id=3]
[ext_resource path="res://debug/ControlsPanel.tscn" type="PackedScene" id=4]
[ext_resource path="res://fonts/source_code_pro_explanations_bold.tres" type="DynamicFont" id=5]
[node name="Demo" type="Node"]
[node name="Player" parent="." instance=ExtResource( 1 )]
position = Vector2( 640, 400 )
[node name="Explanations" parent="." instance=ExtResource( 2 )]
[node name="Explanations" type="RichTextLabel" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 10.0
margin_top = -370.0
margin_right = -10.0
margin_bottom = -730.0
rect_clip_content = false
mouse_filter = 2
size_flags_vertical = 4
custom_fonts/bold_font = ExtResource( 5 )
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.
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 [b]one[/b] 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 [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.
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."
__meta__ = {
"_edit_lock_": true
}
[node name="Control" type="Control" parent="."]
anchor_right = 1.0

View File

@@ -8,6 +8,8 @@ Language: GDScript
Renderer: GLES 2
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/516
## Why use a state machine
States are common in games. You can use the pattern to:

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 += String(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 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

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

View File

@@ -41,7 +41,6 @@ use_filter = true
font_data = ExtResource( 14 )
[node name="Player" type="KinematicBody2D"]
position = Vector2( 628.826, 391.266 )
script = ExtResource( 1 )
__meta__ = {
"_edit_horizontal_guides_": [ ]
@@ -81,11 +80,11 @@ texture = ExtResource( 9 )
[node name="BodyPivot" type="Position2D" parent="."]
[node name="Body" type="Sprite" parent="BodyPivot"]
position = Vector2( 0, -58.8242 )
position = Vector2( 0, -58 )
texture = ExtResource( 10 )
[node name="BulletSpawn" type="Node2D" parent="BodyPivot"]
position = Vector2( 1.17401, -61.266 )
position = Vector2( 0, -58 )
script = ExtResource( 11 )
[node name="CooldownTimer" type="Timer" parent="BodyPivot/BulletSpawn"]
@@ -93,7 +92,7 @@ wait_time = 0.2
one_shot = true
[node name="WeaponPivot" type="Position2D" parent="BodyPivot"]
position = Vector2( 1.17401, -61.266 )
position = Vector2( 0, -58 )
script = ExtResource( 12 )
[node name="Offset" type="Position2D" parent="BodyPivot/WeaponPivot"]
@@ -110,12 +109,16 @@ margin_top = -172.0
margin_right = 110.0
margin_bottom = -138.0
custom_fonts/font = SubResource( 4 )
text = "Test"
text = "Idle"
align = 1
valign = 1
uppercase = true
script = ExtResource( 15 )
[connection signal="state_changed" from="StateMachine" to="StateNameDisplayer" method="_on_StateMachine_state_changed"]
__meta__ = {
"_edit_use_anchors_": false
}
[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="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"]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

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

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,16 +2,17 @@ extends Node2D
var bullet = preload("Bullet.tscn")
func _input(event):
func _unhandled_input(event):
if event.is_action_pressed("fire"):
fire(owner.look_direction)
fire()
func fire(direction):
func fire():
if not $CooldownTimer.is_stopped():
return
$CooldownTimer.start()
var new_bullet = bullet.instance()
new_bullet.direction = direction
add_child(new_bullet)
new_bullet.position = global_position
new_bullet.direction = 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 B

After

Width:  |  Height:  |  Size: 427 B

View File

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

View File

@@ -11,4 +11,4 @@ func _physics_process(_delta):
func _on_StateMachine_state_changed(current_state):
text = current_state.get_name()
text = String(current_state.get_name())

View File

@@ -19,18 +19,26 @@ var height = 0.0
func initialize(speed, velocity):
horizontal_speed = speed
max_horizontal_speed = speed if speed > 0.0 else base_max_horizontal_speed
if speed > 0.0:
max_horizontal_speed = speed
else:
max_horizontal_speed = base_max_horizontal_speed
enter_velocity = velocity
func enter():
var input_direction = get_input_direction()
update_look_direction(input_direction)
horizontal_velocity = enter_velocity if input_direction else Vector2()
if input_direction:
horizontal_velocity = enter_velocity
else:
horizontal_velocity = Vector2()
vertical_speed = 600.0
owner.get_node("AnimationPlayer").play("idle")
func update(delta):
var input_direction = get_input_direction()
update_look_direction(input_direction)
@@ -40,6 +48,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 +62,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

@@ -22,7 +22,11 @@ func update(_delta):
emit_signal("finished", "idle")
update_look_direction(input_direction)
speed = max_run_speed if Input.is_action_pressed("run") else max_walk_speed
if Input.is_action_pressed("run"):
speed = max_run_speed
else:
speed = max_walk_speed
var collision_info = move(speed, input_direction)
if not collision_info:
return

View File

@@ -221,10 +221,10 @@ tracks/0/keys = {
}
[node name="Sword" type="Area2D"]
input_pickable = false
monitorable = false
collision_layer = 16
collision_mask = 3
input_pickable = false
monitorable = false
script = ExtResource( 1 )
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]

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:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

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

View File

@@ -8,11 +8,6 @@
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Hierarchical Finite State Machine"
@@ -26,6 +21,7 @@ config/icon="res://icon.png"
window/size/width=1280
window/size/height=720
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="expand"
@@ -37,63 +33,63 @@ singletons=[ ]
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":16777231,"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":65,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"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":16777232,"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":87,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
]
}
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":16777233,"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":68,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, 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,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"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":16777234,"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":83,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
]
}
fire={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
]
}
run={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
]
}
jump={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
]
}
simulate_damage={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":88,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
]
}
attack={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":6,"pressure":0.0,"pressed":false,"script":null)
]
}
@@ -101,4 +97,5 @@ attack={
[rendering]
quality/driver/driver_name="GLES2"
environment/default_environment="res://default_env.tres"
vram_compression/import_etc=true
vram_compression/import_etc2=false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -21,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)
@@ -41,7 +43,7 @@ func set_active(value):
current_state = null
func _input(event):
func _unhandled_input(event):
current_state.handle_input(event)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 B

View File

@@ -8,6 +8,8 @@ Language: GDScript
Renderer: GLES 2
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/517
## 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 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

After

Width:  |  Height:  |  Size: 474 B

View File

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

View File

@@ -9,10 +9,15 @@ const IMAGE_SIZE = Vector2(930, 720)
# Enums for the various modes and brush shapes that can be applied.
enum BrushModes {
PENCIL, ERASER, CIRCLE_SHAPE, RECTANGLE_SHAPE
PENCIL,
ERASER,
CIRCLE_SHAPE,
RECTANGLE_SHAPE,
}
enum BrushShapes {
RECTANGLE, CIRCLE
RECTANGLE,
CIRCLE,
}
# The top-left position of the canvas.
@@ -51,20 +56,20 @@ func _ready():
func _process(_delta):
var mouse_pos = get_viewport().get_mouse_position()
# Check if the mouse is currently inside the canvas/drawing-area.
is_mouse_in_drawing_area = false
if mouse_pos.x > TL_node.global_position.x:
if mouse_pos.y > TL_node.global_position.y:
is_mouse_in_drawing_area = true
if Input.is_mouse_button_pressed(BUTTON_LEFT):
# If we do not have a position for when the mouse was first clicked, then this must
# be the first time is_mouse_button_pressed has been called since the mouse button was
# released, so we need to store the position.
if mouse_click_start_pos == null:
mouse_click_start_pos = mouse_pos
# If the mouse is inside the canvas and the mouse is 1px away from the position of the mouse last _process call.
if check_if_mouse_is_inside_canvas():
if mouse_pos.distance_to(last_mouse_pos) >= 1:
@@ -77,11 +82,11 @@ func _process(_delta):
undo_element_list_num = brush_data_list.size()
# Add the brush object to draw_elements_array.
add_brush(mouse_pos, brush_mode)
else:
# We've finished our stroke, so we can set a new undo (if a new storke is made).
undo_set = false
# If the mouse is inside the canvas.
if check_if_mouse_is_inside_canvas():
# If we're using either the circle shape mode, or the rectangle shape mode, then
@@ -94,7 +99,7 @@ func _process(_delta):
# Since we've released the left mouse, we need to get a new mouse_click_start_pos next time
#is_mouse_button_pressed is true.
mouse_click_start_pos = null
# Store mouse_pos as last_mouse_pos now that we're done with _process.
last_mouse_pos = mouse_pos
@@ -108,7 +113,7 @@ func check_if_mouse_is_inside_canvas():
if mouse_click_start_pos.x > TL_node.global_position.x:
if mouse_click_start_pos.y > TL_node.global_position.y:
# Make sure the current mouse position is inside the canvas.
if is_mouse_in_drawing_area == true:
if is_mouse_in_drawing_area:
return true
return false
@@ -117,17 +122,17 @@ func undo_stroke():
# Only undo a stroke if we have one.
if undo_element_list_num == UNDO_NONE:
return
# If we are undoing a shape, then we can just remove the latest brush.
if undo_element_list_num == UNDO_MODE_SHAPE:
if brush_data_list.size() > 0:
brush_data_list.remove(brush_data_list.size() - 1)
# Now that we've undone a shape, we cannot undo again until another stoke is added.
undo_element_list_num = UNDO_NONE
# NOTE: if we only had shape brushes, then we could remove the above line and could let the user
# undo until we have a empty element list.
# Otherwise we're removing a either a pencil stroke or a eraser stroke.
else:
# Figure out how many elements/brushes we've added in the last stroke.
@@ -136,7 +141,7 @@ func undo_stroke():
#warning-ignore:unused_variable
for elment_num in range(0, elements_to_remove):
brush_data_list.pop_back()
# Now that we've undone a stoke, we cannot undo again until another stoke is added.
undo_element_list_num = UNDO_NONE
@@ -147,7 +152,7 @@ func undo_stroke():
func add_brush(mouse_pos, type):
# Make new brush dictionary that will hold all of the data we need for the brush.
var new_brush = {}
# Populate the dictionary with values based on the global brush variables.
# We will override these as needed if the brush is a rectange or circle.
new_brush.brush_type = type
@@ -155,13 +160,13 @@ func add_brush(mouse_pos, type):
new_brush.brush_shape = brush_shape
new_brush.brush_size = brush_size
new_brush.brush_color = brush_color
# If the new bursh is a rectangle shape, we need to calculate the top left corner of the rectangle and the
# bottom right corner of the rectangle.
if type == BrushModes.RECTANGLE_SHAPE:
var TL_pos = Vector2()
var BR_pos = Vector2()
# Figure out the left and right positions of the corners and assign them to the proper variable.
if mouse_pos.x < mouse_click_start_pos.x:
TL_pos.x = mouse_pos.x
@@ -169,7 +174,7 @@ func add_brush(mouse_pos, type):
else:
TL_pos.x = mouse_click_start_pos.x
BR_pos.x = mouse_pos.x
# Figure out the top and bottom positions of the corners and assign them to the proper variable.
if mouse_pos.y < mouse_click_start_pos.y:
TL_pos.y = mouse_pos.y
@@ -177,11 +182,11 @@ func add_brush(mouse_pos, type):
else:
TL_pos.y = mouse_click_start_pos.y
BR_pos.y = mouse_pos.y
# Assign the positions to the brush.
new_brush.brush_pos = TL_pos
new_brush.brush_shape_rect_pos_BR = BR_pos
# If the brush isa circle shape, then we need to calculate the radius of the circle.
if type == BrushModes.CIRCLE_SHAPE:
# Get the center point inbetween the mouse position and the position of the mouse when we clicked.
@@ -190,7 +195,7 @@ func add_brush(mouse_pos, type):
# the center to the top/bottom positon of the mouse.
new_brush.brush_pos = center_pos
new_brush.brush_shape_circle_radius = center_pos.distance_to(Vector2(center_pos.x, mouse_pos.y))
# Add the brush and update/draw all of the brushes.
brush_data_list.append(new_brush)
update()
@@ -214,7 +219,7 @@ func _draw():
BrushModes.ERASER:
# NOTE: this is a really cheap way of erasing that isn't really erasing!
# However, this gives similar results in a fairy simple way!
# Erasing works exactly the same was as pencil does for both the rectangle shape and the circle shape,
# but instead of using brush.brush_color, we instead use bg_color instead.
if brush.brush_shape == BrushShapes.RECTANGLE:
@@ -232,18 +237,16 @@ 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()
# Crop the image so we only have canvas area.
var cropped_image = img.get_rect(Rect2(TL_node.global_position, IMAGE_SIZE))
# Flip the image on the Y-axis (it's flipped upside down by default).
cropped_image.flip_y()
# Save the image with the passed in path we got from the save dialog.
cropped_image.save_png(path)

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 )

BIN
2d/gd_paint/paint_tools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 273 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/object.png-f9ec4c5540ae154e2e73d50438312f26.stex"
path="res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://grid_movement/tilesets/grid/object.png"
dest_files=[ "res://.import/object.png-f9ec4c5540ae154e2e73d50438312f26.stex" ]
source_file="res://paint_tools.png"
dest_files=[ "res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex" ]
[params]
@@ -28,6 +28,7 @@ process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=true

View File

@@ -8,24 +8,20 @@
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="GD Paint"
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"
run/main_scene="res://paint_root.tscn"
config/icon="res://icon.png"
[display]
window/size/width=1280
window/size/height=720
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="keep"
@@ -36,4 +32,5 @@ singletons=[ ]
[rendering]
quality/driver/driver_name="GLES2"
environment/default_environment="res://default_env.tres"
vram_compression/import_etc=true
vram_compression/import_etc2=false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 31 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.
@@ -50,7 +46,7 @@ func button_pressed(button_name):
# If a brush mode button is pressed.
var tool_name = null
var shape_name = null
if button_name == "mode_pencil":
paint_control.brush_mode = paint_control.BrushModes.PENCIL
brush_settings.modulate = Color(1, 1, 1, 1)
@@ -84,7 +80,7 @@ func button_pressed(button_name):
save_dialog.popup_centered()
elif button_name == "undo_stroke":
paint_control.undo_stroke()
# Update the labels (in case the brush mode or brush shape has changed).
if tool_name != null:
label_tools.text = "Selected tool: " + tool_name

View File

@@ -9,6 +9,8 @@ Language: GDScript
Renderer: GLES 3 (HDR is not available in GLES 2)
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/110
## Screenshots
![Screenshot](screenshots/left.png)

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