Compare commits

..

1 Commits
master ... 4.3

Author SHA1 Message Date
Aaron Franke
52e3004465 [4.3] Simplify list of branches in the README (#1255) 2025-10-02 17:10:26 -07:00
2600 changed files with 12299 additions and 36630 deletions

View File

@@ -1,21 +0,0 @@
BasedOnStyle: LLVM
AlignAfterOpenBracket: DontAlign
AlignOperands: DontAlign
AlignTrailingComments:
Kind: Never
OverEmptyLines: 0
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: Inline
BreakConstructorInitializers: AfterColon
ColumnLimit: 0
ContinuationIndentWidth: 8
IndentCaseLabels: true
IndentWidth: 4
InsertBraces: true
KeepEmptyLinesAtTheStartOfBlocks: false
RemoveSemicolon: true
SpacesInLineCommentPrefix:
Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code.
Maximum: -1
TabWidth: 4
UseTab: Always

View File

@@ -32,7 +32,7 @@
<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>
<li><code>xr/openxr_*</code>: Not functional on the web platform, as these demos are not designed for WebXR.</li>
<li><code>xr/*</code>: Not functional on the web platform, as these demos are not designed for WebXR.</li>
</ul>
</body>
</html>

View File

@@ -116,12 +116,12 @@
Some of these demos may not function or render correctly on the web platform,
especially on mobile devices.
For best performance, it's recommended to
<a href="https://godotengine.org/download/">download</a> a native editor
<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/tutorials/export/exporting_for_web.html">Exporting for the Web</a>
<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 the web.
</p>

View File

@@ -1,28 +0,0 @@
name: 🌐 Check URLs
on: [push, pull_request]
jobs:
check-urls:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
- name: Restore lychee cache
uses: actions/cache@v4
with:
path: .lycheecache
key: cache-lychee-${{ github.sha }}
restore-keys: cache-lychee-
- name: Run lychee
uses: lycheeverse/lychee-action@v2
with:
args: >
--no-progress
--cache
--max-cache-age 1d
"**/*.md" "**/*.gd" "**/*.cs" "**/*.tscn" "**/*.tres" "**/*.html"
- name: Fail if there were link errors
run: exit ${{ steps.lc.outputs.exit_code }}

View File

@@ -1,128 +0,0 @@
name: Export projects to Web and deploy to GitHub Pages
on:
push:
branches:
- master
env:
GODOT_VERSION: 4.5.1
jobs:
export-html5:
if: github.repository == 'godotengine/godot-demo-projects'
name: Export projects to Web and deploy to GitHub Pages
runs-on: ubuntu-24.04
container:
image: barichello/godot-ci:4.5.1
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup
run: |
mkdir -p ~/.local/share/godot/export_templates/
mv /root/.local/share/godot/export_templates/$GODOT_VERSION.stable ~/.local/share/godot/export_templates/$GODOT_VERSION.stable
- name: Export projects to Web
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 Web
# since they're platform-specific or demos that are currently broken in Web.
# Remember to update `.github/dist/footer.html` when updating the list of excluded demos.
rm -rf \
2d/glow/ \
2d/navigation_mesh_chunks/ \
2d/physics_tests/ \
3d/labels_and_texts/ \
3d/decals/ \
3d/ik/ \
3d/navigation_mesh_chunks/ \
3d/occlusion_culling_mesh_lod/ \
3d/particles/ \
3d/physical_light_camera_units/ \
3d/physics_tests/ \
3d/variable_rate_shading/ \
3d/volumetric_fog/ \
3d/voxel/ \
audio/bpm_sync/ \
audio/device_changer/ \
audio/midi_piano/ \
audio/spectrum/ \
compute/ \
gui/msdf_font/ \
gui/translation/ \
loading/runtime_save_load \
misc/compute_shader_heightmap \
misc/large_world_coordinates/ \
misc/matrix_transform/ \
mobile/android_iap/ \
mobile/sensors/ \
mono/ \
networking/ \
plugins/ \
xr/openxr_character_centric_movement \
xr/openxr_composition_layers \
xr/openxr_hand_tracking_demo \
xr/openxr_origin_centric_movement
for panorama in 3d/material_testers/backgrounds/*.hdr; do
# Decrease the resolution to get below the 100 MB PCK size limit.
# Otherwise, the website can't be deployed as files larger than 100 MB
# can't be pushed to GitHub.
mogrify -resize 66.667% "$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 "================================================================================"
echo "Exporting demo $demo..."
echo "================================================================================"
mkdir -p "$BASEDIR/.github/dist/$demo"
cd "$BASEDIR/$demo"
# Copy an export template preset file configured for Web exporting.
# This way, we don't have to commit `export_presets.cfg` for each project.
cp "$BASEDIR/.github/dist/export_presets.cfg" .
# Enable ETC2 texture importing, which is disabled by default (but required for web exports to work on mobile platforms).
echo "[rendering]\n\ntextures/vram_compression/import_etc2_astc=true" >> project.godot
# Enable WebXR Polyfill and WebXR Layers Polyfill for the WebXR demo.
if [ "$demo" == "xr/webxr/" ]; then
sed -i 's~^html/head_include=""$~html/head_include="<script src=\\"https://cdn.jsdelivr.net/npm/webxr-polyfill@latest/build/webxr-polyfill.min.js\\"></script>\n<script>\nvar polyfill = new WebXRPolyfill();\n</script>\n<script src=\\"https://cdn.jsdelivr.net/npm/webxr-layers-polyfill@latest/build/webxr-layers-polyfill.min.js\\"></script>\n<script>\nvar layersPolyfill = new WebXRLayersPolyfill();\n</script>"~g' export_presets.cfg
fi
godot --verbose --headless --export-release "Web" "$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/JavaScript 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/index.icon.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/v4
with:
# The folder the action should deploy.
folder: .github/dist
# Artifacts are large; don't keep the branch's history.
single-commit: true

View File

@@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v5
- name: Install dependencies
run: |

3
.gitignore vendored
View File

@@ -24,6 +24,3 @@ mono_crash.*.json
# Jetbrains IDE files
.idea/
# Ignore addon plugins
3d/sprite3d/addons

View File

@@ -1,31 +0,0 @@
# Don't read Godot's own URL schemes as web URLs.
user:\/\/.*
res:\/\/.*
uid:\/\/.*
# Don't read WebSockets or TCP URLs as web URLs.
ws(s?):\/\/.*
tcp:\/\/.*
# Security checks prevent checking the URLs of these websites automatically,
# typically returning 403 errors.
.*asecuritysite\.com.*
.*intel\.com.*
.*reddit\.com.*
# Don't check URLs from these websites due to frequent rate limits (error 429) or timeouts.
.*adobe\.com.*
.*gamedevartisan\.com.*
.*github\.com.*
.*gnu\.org.*
.*loopit\.dk.*
.*meta\.com.*
.*shadertoy\.com.*
.*sourceforge\.io.*
# Not a valid URL with the GET method, which lychee always sends.
# Mentioned in the class reference.
.*httpbin\.org\/post
# Class reference mentions `example.com/index.php` in an example, which is 404.
.*example\.com.*

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b1yd0wl8kt2i7"
uid="uid://bcoiuym4nw1ua"
path="res://.godot/imported/bullet.png-ff1424653e10246c11e3724e402c519e.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/bullet.png-ff1424653e10246c11e3724e402c519e.c
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,5 +1,5 @@
extends Node2D
# This demo is an example of controlling a high number of 2D objects with logic
# 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.
@@ -17,7 +17,7 @@ var shape := RID()
class Bullet:
var position := Vector2()
var speed := 1.0
# The body is stored as an RID, which is an "opaque" way to access resources.
# 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()
@@ -42,9 +42,9 @@ func _ready() -> void:
# Place bullets randomly on the viewport and move bullets outside the
# play area so that they fade in nicely.
bullet.position = Vector2(
randf_range(0, get_viewport_rect().size.x) + get_viewport_rect().size.x,
randf_range(0, get_viewport_rect().size.y)
)
randf_range(0, get_viewport_rect().size.x) + get_viewport_rect().size.x,
randf_range(0, get_viewport_rect().size.y)
)
var transform2d := Transform2D()
transform2d.origin = bullet.position
PhysicsServer2D.body_set_state(bullet.body, PhysicsServer2D.BODY_STATE_TRANSFORM, transform2d)

View File

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

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://c33jd3nwdqtb4"
uid="uid://d3u7k0742d5ug"
path="res://.godot/imported/face_happy.png-38d387d31ec13459f749c93ce3d75d80.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/face_happy.png-38d387d31ec13459f749c93ce3d75d
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b63ok8dbyysfs"
uid="uid://8j32onnr4qo3"
path="res://.godot/imported/face_sad.png-0ac7165eab24f595aba17a746a66c550.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/face_sad.png-0ac7165eab24f595aba17a746a66c550
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://44incao8gryo"
uid="uid://brwp8bimc75uu"
path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ct
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,11 +1,11 @@
extends Node2D
# This demo is an example of controlling a high number of 2D objects with logic
# 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: int = 0
var touching := 0
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
@@ -16,10 +16,10 @@ func _ready() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
func _input(input_event: InputEvent) -> void:
func _input(event: InputEvent) -> void:
# Getting the movement of the mouse so the sprite can follow its position.
if input_event is InputEventMouseMotion:
position = input_event.position - Vector2(0, 16)
if event is InputEventMouseMotion:
position = event.position - Vector2(0, 16)
func _on_body_shape_entered(_body_id: RID, _body: Node2D, _body_shape_index: int, _local_shape_index: int) -> void:

View File

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

View File

@@ -14,7 +14,7 @@ config/name="Bullet Shower"
config/description="Demonstrates how to manage large amounts of objects efficiently using low-level Servers."
config/tags=PackedStringArray("2d", "demo", "official", "performance")
run/main_scene="res://shower.tscn"
config/features=PackedStringArray("4.5")
config/features=PackedStringArray("4.2")
config/icon="res://icon.webp"
[debug]

View File

@@ -1,9 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://dxq1b4cth265d"]
[gd_scene load_steps=7 format=3 uid="uid://c78by7hc4fmwx"]
[ext_resource type="Script" uid="uid://e3fsq0i746o1" path="res://bullets.gd" id="2"]
[ext_resource type="Texture2D" uid="uid://c33jd3nwdqtb4" path="res://face_happy.png" id="3"]
[ext_resource type="Texture2D" uid="uid://b63ok8dbyysfs" path="res://face_sad.png" id="4"]
[ext_resource type="Script" uid="uid://eu1k1ulu68o2" path="res://player.gd" id="5"]
[ext_resource type="Script" path="res://bullets.gd" id="2"]
[ext_resource type="Texture2D" uid="uid://d3u7k0742d5ug" path="res://face_happy.png" id="3"]
[ext_resource type="Texture2D" uid="uid://8j32onnr4qo3" path="res://face_sad.png" id="4"]
[ext_resource type="Script" path="res://player.gd" id="5"]
[sub_resource type="SpriteFrames" id="1"]
animations = [{

View File

@@ -1,23 +0,0 @@
# Custom drawing in 2D
A demo showing how to draw 2D elements in Godot without using nodes. This can be done
to create procedural graphics, perform debug drawing to help troubleshoot issues in
game logic, or to improve performance by not creating a node for every visible element.
Antialiasing can be performed using two approaches: either by enabling the `antialiasing`
parameter provided by some of the CanvasItem `draw_*` methods, or by enabling 2D MSAA
in the Project Settings. 2D MSAA is generally slower, but it works with any kind of line-based
or polygon-based 2D drawing, even for `draw_*` methods that don't support an `antialiasing`
parameter. Note that 2D MSAA is only available in the Forward+ and Mobile
renderers, not Compatibility.
See [Custom drawing in 2D](https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html)
in the documentation for more information.
Language: GDScript
Renderer: Mobile
## Screenshots
![Screenshot](screenshots/custom_drawing.webp)

View File

@@ -1,43 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
var time := 0.0
func _process(delta: float) -> void:
# Increment a counter variable that we use in `_draw()`.
time += delta
# Force redrawing on every processed frame, so that the animation can visibly progress.
# Only do this when the node is visible in tree, so that we don't force continuous redrawing
# when not needed (low-processor usage mode is enabled in this demo).
if is_visible_in_tree():
queue_redraw()
func _draw() -> void:
var margin := Vector2(240, 70)
var offset := Vector2()
# Line width of `-1.0` is only usable with draw antialiasing disabled,
# as it uses hardware line drawing as opposed to polygon-based line drawing.
# Automatically use polygon-based line drawing when needed to avoid runtime warnings.
# We also use a line width of `0.5` instead of `1.0` to better match the appearance
# of non-antialiased line drawing, as draw antialiasing tends to make lines look thicker.
var line_width_thin := 0.5 if use_antialiasing else -1.0
# Draw an animated arc to simulate a circular progress bar.
# The start angle is set so the arc starts from the top.
const POINT_COUNT = 48
var progress := wrapf(time, 0.0, 1.0)
draw_arc(
margin + offset,
50.0,
0.75 * TAU,
(0.75 + progress) * TAU,
POINT_COUNT,
Color.MEDIUM_AQUAMARINE,
line_width_thin,
use_antialiasing
)

View File

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

View File

@@ -1,38 +0,0 @@
extends Control
var use_antialiasing: bool = false
func _draw() -> void:
var margin := Vector2(240, 70)
var offset := Vector2(0, 150)
# This is an example of using draw commands to create animations.
# For "continuous" animations, you can use a timer within `_draw()` and call `queue_redraw()`
# in `_process()` to redraw every frame.
# Animation length in seconds. The animation will loop after the specified duration.
const ANIMATION_LENGTH = 2.0
# 5 frames per second.
const ANIMATION_FRAMES = 10
# Declare an animation frame with randomized rotation and color for each frame.
# `draw_animation_slice()` makes it so the following draw commands are only visible
# on screen when the current time is within the animation slice.
# NOTE: Pause does not affect animations drawn by `draw_animation_slice()`
# (they will keep playing).
for frame in ANIMATION_FRAMES:
# `remap()` is useful to determine the time slice in which a frame is visible.
# For example, on the 2nd frame, `slice_begin` is `0.2` and `slice_end` is `0.4`.
var slice_begin := remap(frame, 0, ANIMATION_FRAMES, 0, ANIMATION_LENGTH)
var slice_end := remap(frame + 1, 0, ANIMATION_FRAMES, 0, ANIMATION_LENGTH)
draw_animation_slice(ANIMATION_LENGTH, slice_begin, slice_end)
draw_set_transform(margin + offset, deg_to_rad(randf_range(-5.0, 5.0)))
draw_rect(
Rect2(Vector2(), Vector2(100, 50)),
Color.from_hsv(randf(), 0.4, 1.0),
true,
-1.0,
use_antialiasing
)
draw_end_animation()

View File

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

View File

@@ -1,14 +0,0 @@
extends Control
func _on_msaa_2d_item_selected(index: int) -> void:
get_viewport().msaa_2d = index as Viewport.MSAA
func _on_draw_antialiasing_toggled(toggled_on: bool) -> void:
var nodes: Array[Node] = %TabContainer.get_children()
nodes.push_back(%AnimationSlice)
for tab: Control in nodes:
tab.use_antialiasing = toggled_on
# Force all tabs to redraw so that the antialiasing updates.
tab.queue_redraw()

View File

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

View File

@@ -1,272 +0,0 @@
[gd_scene load_steps=10 format=3 uid="uid://e3ko2k5vfsph"]
[ext_resource type="Script" uid="uid://k86266poffsc" path="res://custom_drawing.gd" id="1_rtndo"]
[ext_resource type="Script" uid="uid://bs2i4k2suatwx" path="res://lines.gd" id="2_exx0l"]
[ext_resource type="Script" uid="uid://kr0artw8tmec" path="res://rectangles.gd" id="3_yrx86"]
[ext_resource type="Script" uid="uid://bavbrayrl4aqv" path="res://polygons.gd" id="4_obj11"]
[ext_resource type="Script" uid="uid://dmgkvc33ohsn1" path="res://textures.gd" id="5_84cac"]
[ext_resource type="Script" uid="uid://cmgvk2l7icywj" path="res://meshes.gd" id="5_exx0l"]
[ext_resource type="Script" uid="uid://by5ufa6o3liw" path="res://text.gd" id="6_4w081"]
[ext_resource type="Script" uid="uid://m1872t0qa0i4" path="res://animation.gd" id="8_yrx86"]
[ext_resource type="Script" uid="uid://dxbst4jd731sx" path="res://animation_slice.gd" id="9_obj11"]
[node name="CustomDrawing" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_rtndo")
[node name="TabContainer" type="TabContainer" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
current_tab = 0
[node name="Lines" type="Panel" parent="TabContainer"]
layout_mode = 2
script = ExtResource("2_exx0l")
metadata/_tab_index = 0
[node name="DrawLine" type="Label" parent="TabContainer/Lines"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 172.0
offset_bottom = 97.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_line()
draw_dashed_line()"
[node name="DrawCircle" type="Label" parent="TabContainer/Lines"]
layout_mode = 0
offset_left = 24.0
offset_top = 154.0
offset_right = 122.0
offset_bottom = 177.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_circle()"
[node name="DrawArc" type="Label" parent="TabContainer/Lines"]
layout_mode = 0
offset_left = 24.0
offset_top = 264.0
offset_right = 109.0
offset_bottom = 287.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_arc()"
[node name="Rectangles" type="Panel" parent="TabContainer"]
visible = false
layout_mode = 2
script = ExtResource("3_yrx86")
metadata/_tab_index = 1
[node name="DrawRect" type="Label" parent="TabContainer/Rectangles"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 109.0
offset_bottom = 71.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_rect()"
[node name="DrawStyleBox" type="Label" parent="TabContainer/Rectangles"]
layout_mode = 0
offset_left = 24.0
offset_top = 296.0
offset_right = 153.0
offset_bottom = 319.0
text = "draw_style_box()"
[node name="Polygons" type="Panel" parent="TabContainer"]
visible = false
layout_mode = 2
script = ExtResource("4_obj11")
metadata/_tab_index = 2
[node name="DrawPrimitive" type="Label" parent="TabContainer/Polygons"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 207.0
offset_bottom = 97.0
text = "draw_primitive()"
[node name="DrawPolygon" type="Label" parent="TabContainer/Polygons"]
layout_mode = 0
offset_left = 24.0
offset_top = 168.0
offset_right = 207.0
offset_bottom = 217.0
text = "draw_polygon()
draw_colored_polygon()"
[node name="DrawPolyline" type="Label" parent="TabContainer/Polygons"]
layout_mode = 0
offset_left = 24.0
offset_top = 264.0
offset_right = 195.0
offset_bottom = 313.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_polyline()
draw_polyline_colors()"
[node name="DrawMultiline" type="Label" parent="TabContainer/Polygons"]
layout_mode = 0
offset_left = 24.0
offset_top = 392.0
offset_right = 203.0
offset_bottom = 441.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_multiline()
draw_multiline_colors()"
[node name="Meshes" type="Panel" parent="TabContainer"]
visible = false
layout_mode = 2
script = ExtResource("5_exx0l")
metadata/_tab_index = 3
[node name="DrawMesh" type="Label" parent="TabContainer/Meshes"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 207.0
offset_bottom = 97.0
text = "draw_mesh()"
[node name="DrawMultiMesh" type="Label" parent="TabContainer/Meshes"]
layout_mode = 0
offset_left = 24.0
offset_top = 208.0
offset_right = 207.0
offset_bottom = 257.0
text = "draw_multimesh()"
[node name="Textures" type="Panel" parent="TabContainer"]
visible = false
texture_repeat = 2
layout_mode = 2
script = ExtResource("5_84cac")
metadata/_tab_index = 4
[node name="DrawTexture" type="Label" parent="TabContainer/Textures"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 175.0
offset_bottom = 97.0
text = "draw_texture()
draw_texture_rect()"
[node name="DrawTextureRectRegion" type="Label" parent="TabContainer/Textures"]
layout_mode = 0
offset_left = 24.0
offset_top = 392.0
offset_right = 231.0
offset_bottom = 415.0
text = "draw_texture_rect_region()"
[node name="Text" type="Panel" parent="TabContainer"]
visible = false
layout_mode = 2
script = ExtResource("6_4w081")
metadata/_tab_index = 5
[node name="DrawChar" type="Label" parent="TabContainer/Text"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 125.0
offset_bottom = 97.0
text = "draw_char()
draw_string()"
[node name="Animation" type="Panel" parent="TabContainer"]
visible = false
layout_mode = 2
script = ExtResource("8_yrx86")
metadata/_tab_index = 6
[node name="DrawArcTime" type="Label" parent="TabContainer/Animation"]
layout_mode = 0
offset_left = 24.0
offset_top = 48.0
offset_right = 125.0
offset_bottom = 97.0
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
text = "draw_arc()
+ time variable"
[node name="DrawAnimationSlice" type="Label" parent="TabContainer/Animation"]
layout_mode = 0
offset_left = 24.0
offset_top = 216.0
offset_right = 201.0
offset_bottom = 265.0
text = "draw_animation_slice()"
[node name="AnimationSlice" type="Control" parent="TabContainer/Animation"]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("9_obj11")
[node name="Options" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 24.0
offset_top = -64.0
offset_right = 441.0
offset_bottom = -24.0
grow_vertical = 0
theme_override_constants/separation = 20
[node name="MSAA2DLabel" type="Label" parent="Options"]
layout_mode = 2
text = "MSAA 2D"
[node name="MSAA2DOptionButton" type="OptionButton" parent="Options"]
layout_mode = 2
selected = 0
item_count = 4
popup/item_0/text = "Disabled"
popup/item_0/id = 0
popup/item_1/text = "2×"
popup/item_1/id = 1
popup/item_2/text = "4×"
popup/item_2/id = 2
popup/item_3/text = "8×"
popup/item_3/id = 3
[node name="VSeparator" type="VSeparator" parent="Options"]
layout_mode = 2
[node name="DrawAntialiasing" type="CheckButton" parent="Options"]
layout_mode = 2
tooltip_text = "Performs antialiasing by adding a feathered outline
to lines that are drawn in 2D. This is generally faster to render
than 2D MSAA, but not all draw commands support it.
Commands that support draw antialiasing are
highlighted in green."
theme_override_colors/font_color = Color(0.501961, 1, 0.501961, 1)
theme_override_colors/font_focus_color = Color(0.501961, 1, 0.501961, 1)
theme_override_colors/font_pressed_color = Color(0.501961, 1, 0.501961, 1)
text = "Draw Antialiasing"
[connection signal="item_selected" from="Options/MSAA2DOptionButton" to="." method="_on_msaa_2d_item_selected"]
[connection signal="toggled" from="Options/DrawAntialiasing" to="." method="_on_draw_antialiasing_toggled"]

View File

@@ -1 +0,0 @@
<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m15.999738 8a7.9997377 7.9997377 0 0 0 -7.999738 7.999738v67.99777c11.999607 3.999869 7.999738-7.999738 15.999475-7.999738v-51.998295h79.997375v17.599423a19.319367 19.319367 0 0 1 15.99948 3.999869v-29.599029a7.9997377 7.9997377 0 0 0 -7.99974-7.999738zm10.879643 81.43733c-2.263926 1.351955-4.127865 3.727878-5.159831 6.919773-3.327891 10.215667-19.3353659-7.519754-7.567752 16.071477 3.719878 7.44775 15.295499 9.61568 22.679257 5.78381a15.375496 15.375496 0 0 0 6.639782-20.439334c-4.623848-9.263696-11.59962-11.287629-16.591456-8.327726zm17.775417-5.599817 10.175666 19.959347 56.550146-28.815056a11.319629 11.319629 0 0 0 -10.07167-20.271336zm27.343104-43.838562v7.999737h-7.999738v7.999738h-15.999476v7.999738h-7.999737v7.999738h-7.999738v7.999737h1.999935l53.998229-27.783089v-4.215862h-7.999738v-7.999737z" fill="#808080" stroke-width=".999999"/></svg>

Before

Width:  |  Height:  |  Size: 935 B

View File

@@ -1,43 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cfri1nx5avo7w"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

View File

@@ -1,89 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
func _draw() -> void:
var margin := Vector2(200, 50)
# Line width of `-1.0` is only usable with draw antialiasing disabled,
# as it uses hardware line drawing as opposed to polygon-based line drawing.
# Automatically use polygon-based line drawing when needed to avoid runtime warnings.
# We also use a line width of `0.5` instead of `1.0` to better match the appearance
# of non-antialiased line drawing, as draw antialiasing tends to make lines look thicker.
var line_width_thin := 0.5 if use_antialiasing else -1.0
# Make thick lines 1 pixel thinner when draw antialiasing is enabled,
# as draw antialiasing tends to make lines look thicker.
var antialiasing_width_offset := 1.0 if use_antialiasing else 0.0
var offset := Vector2()
var line_length := Vector2(140, 35)
draw_line(margin + offset, margin + offset + line_length, Color.GREEN, line_width_thin, use_antialiasing)
offset += Vector2(line_length.x + 15, 0)
draw_line(margin + offset, margin + offset + line_length, Color.GREEN, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(line_length.x + 15, 0)
draw_line(margin + offset, margin + offset + line_length, Color.GREEN, 6.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(line_length.x + 15, 0)
draw_dashed_line(margin + offset, margin + offset + line_length, Color.CYAN, line_width_thin, 5.0, true, use_antialiasing)
offset += Vector2(line_length.x + 15, 0)
draw_dashed_line(margin + offset, margin + offset + line_length, Color.CYAN, 2.0 - antialiasing_width_offset, 10.0, true, use_antialiasing)
offset += Vector2(line_length.x + 15, 0)
draw_dashed_line(margin + offset, margin + offset + line_length, Color.CYAN, 6.0 - antialiasing_width_offset, 15.0, true, use_antialiasing)
offset = Vector2(40, 120)
draw_circle(margin + offset, 40, Color.ORANGE, false, line_width_thin, use_antialiasing)
offset += Vector2(100, 0)
draw_circle(margin + offset, 40, Color.ORANGE, false, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(100, 0)
draw_circle(margin + offset, 40, Color.ORANGE, false, 6.0 - antialiasing_width_offset, use_antialiasing)
# Draw a filled circle. The width parameter is ignored for filled circles (it's set to `-1.0` to avoid warnings).
# We also reduce the radius by half the antialiasing width offset.
# Otherwise, the circle becomes very slightly larger when draw antialiasing is enabled.
offset += Vector2(100, 0)
draw_circle(margin + offset, 40 - antialiasing_width_offset * 0.5, Color.ORANGE, true, -1.0, use_antialiasing)
# `draw_set_transform()` is a stateful command: it affects *all* `draw_` methods within this
# `_draw()` function after it. This can be used to translate, rotate, or scale `draw_` methods
# that don't offer dedicated parameters for this (such as `draw_primitive()` not having a position parameter).
# To reset back to the initial transform, call `draw_set_transform(Vector2())`.
#
# Draw a horizontally stretched circle.
offset += Vector2(200, 0)
draw_set_transform(margin + offset, 0.0, Vector2(3.0, 1.0))
draw_circle(Vector2(), 40, Color.ORANGE, false, line_width_thin, use_antialiasing)
draw_set_transform(Vector2())
# Draw a quarter circle (`TAU` represents a full turn in radians).
const POINT_COUNT_HIGH = 24
offset = Vector2(0, 200)
draw_arc(margin + offset, 60, 0, 0.25 * TAU, POINT_COUNT_HIGH, Color.YELLOW, line_width_thin, use_antialiasing)
offset += Vector2(100, 0)
draw_arc(margin + offset, 60, 0, 0.25 * TAU, POINT_COUNT_HIGH, Color.YELLOW, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(100, 0)
draw_arc(margin + offset, 60, 0, 0.25 * TAU, POINT_COUNT_HIGH, Color.YELLOW, 6.0 - antialiasing_width_offset, use_antialiasing)
# Draw a three quarters of a circle with a low point count, which gives it an angular look.
const POINT_COUNT_LOW = 7
offset += Vector2(125, 30)
draw_arc(margin + offset, 40, -0.25 * TAU, 0.5 * TAU, POINT_COUNT_LOW, Color.YELLOW, line_width_thin, use_antialiasing)
offset += Vector2(100, 0)
draw_arc(margin + offset, 40, -0.25 * TAU, 0.5 * TAU, POINT_COUNT_LOW, Color.YELLOW, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(100, 0)
draw_arc(margin + offset, 40, -0.25 * TAU, 0.5 * TAU, POINT_COUNT_LOW, Color.YELLOW, 6.0 - antialiasing_width_offset, use_antialiasing)
# Draw a horizontally stretched arc.
offset += Vector2(200, 0)
draw_set_transform(margin + offset, 0.0, Vector2(3.0, 1.0))
draw_arc(Vector2(), 40, -0.25 * TAU, 0.5 * TAU, POINT_COUNT_LOW, Color.YELLOW, line_width_thin, use_antialiasing)
draw_set_transform(Vector2())

View File

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

View File

@@ -1,63 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
# You must hold a reference to the Resources either as member variables or within an Array or Dictionary.
# Otherwise, they get freed automatically and the renderer won't be able to draw them.
var text_mesh := TextMesh.new()
var noise_texture := NoiseTexture2D.new()
var gradient_texture := GradientTexture2D.new()
var sphere_mesh := SphereMesh.new()
var multi_mesh := MultiMesh.new()
func _ready() -> void:
text_mesh.text = "TextMesh"
# In 2D, 1 unit equals 1 pixel, so the default size at which PrimitiveMeshes are displayed is tiny.
# Use much larger mesh size to compensate, or use `draw_set_transform()` before using `draw_mesh()`
# to scale the draw command.
text_mesh.pixel_size = 2.5
noise_texture.seamless = true
noise_texture.as_normal_map = true
noise_texture.noise = FastNoiseLite.new()
gradient_texture.gradient = Gradient.new()
sphere_mesh.height = 80.0
sphere_mesh.radius = 40.0
multi_mesh.use_colors = true
multi_mesh.instance_count = 5
multi_mesh.set_instance_transform_2d(0, Transform2D(0.0, Vector2(0, 0)))
multi_mesh.set_instance_color(0, Color(1, 0.7, 0.7))
multi_mesh.set_instance_transform_2d(1, Transform2D(0.0, Vector2(0, 100)))
multi_mesh.set_instance_color(1, Color(0.7, 1, 0.7))
multi_mesh.set_instance_transform_2d(2, Transform2D(0.0, Vector2(100, 100)))
multi_mesh.set_instance_color(2, Color(0.7, 0.7, 1))
multi_mesh.set_instance_transform_2d(3, Transform2D(0.0, Vector2(100, 0)))
multi_mesh.set_instance_color(3, Color(1, 1, 0.7))
multi_mesh.set_instance_transform_2d(4, Transform2D(0.0, Vector2(50, 50)))
multi_mesh.set_instance_color(4, Color(0.7, 1, 1))
multi_mesh.mesh = sphere_mesh
func _draw() -> void:
const margin := Vector2(300, 70)
var offset := Vector2()
# `draw_set_transform()` is a stateful command: it affects *all* `draw_` methods within this
# `_draw()` function after it. This can be used to translate, rotate, or scale `draw_` methods
# that don't offer dedicated parameters for this (such as `draw_primitive()` not having a position parameter).
# To reset back to the initial transform, call `draw_set_transform(Vector2())`.
#
# Flip drawing on the Y axis so the text appears upright.
draw_set_transform(margin + offset, 0.0, Vector2(1, -1))
draw_mesh(text_mesh, noise_texture)
offset += Vector2(150, 0)
draw_set_transform(margin + offset)
draw_mesh(sphere_mesh, noise_texture)
offset = Vector2(0, 120)
draw_set_transform(margin + offset)
draw_multimesh(multi_mesh, gradient_texture)

View File

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

View File

@@ -1,126 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
func _draw() -> void:
var margin := Vector2(240, 40)
# Line width of `-1.0` is only usable with draw antialiasing disabled,
# as it uses hardware line drawing as opposed to polygon-based line drawing.
# Automatically use polygon-based line drawing when needed to avoid runtime warnings.
# We also use a line width of `0.5` instead of `1.0` to better match the appearance
# of non-antialiased line drawing, as draw antialiasing tends to make lines look thicker.
var line_width_thin := 0.5 if use_antialiasing else -1.0
# Make thick lines 1 pixel thinner when draw antialiasing is enabled,
# as draw antialiasing tends to make lines look thicker.
var antialiasing_width_offset := 1.0 if use_antialiasing else 0.0
var points := PackedVector2Array([
Vector2(0, 0),
Vector2(0, 60),
Vector2(60, 90),
Vector2(60, 0),
Vector2(40, 25),
Vector2(10, 40),
])
var colors := PackedColorArray([
Color.WHITE,
Color.RED,
Color.GREEN,
Color.BLUE,
Color.MAGENTA,
Color.MAGENTA,
])
var offset := Vector2()
# `draw_set_transform()` is a stateful command: it affects *all* `draw_` methods within this
# `_draw()` function after it. This can be used to translate, rotate, or scale `draw_` methods
# that don't offer dedicated parameters for this (such as `draw_primitive()` not having a position parameter).
# To reset back to the initial transform, call `draw_set_transform(Vector2())`.
draw_set_transform(margin + offset)
draw_primitive(points.slice(0, 1), colors.slice(0, 1), PackedVector2Array())
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_primitive(points.slice(0, 2), colors.slice(0, 2), PackedVector2Array())
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_primitive(points.slice(0, 3), colors.slice(0, 3), PackedVector2Array())
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_primitive(points.slice(0, 4), colors.slice(0, 4), PackedVector2Array())
# Draw a polygon with multiple colors that are interpolated between each point.
# Colors are specified in the same order as the points' positions, but in a different array.
offset = Vector2(0, 120)
draw_set_transform(margin + offset)
draw_polygon(points, colors)
# Draw a polygon with a single color. Only a points array is needed in this case.
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_colored_polygon(points, Color.YELLOW)
# Draw a polygon-based line. Each segment is connected to the previous one, which means
# `draw_polyline()` always draws a contiguous line.
offset = Vector2(0, 240)
draw_set_transform(margin + offset)
draw_polyline(points, Color.SKY_BLUE, line_width_thin, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_polyline(points, Color.SKY_BLUE, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_polyline(points, Color.SKY_BLUE, 6.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_polyline_colors(points, colors, line_width_thin, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_polyline_colors(points, colors, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_polyline_colors(points, colors, 6.0 - antialiasing_width_offset, use_antialiasing)
# Draw multiple lines in a single draw command. Unlike `draw_polyline()`,
# lines are not connected to the last segment.
# This is faster than calling `draw_line()` several times and should be preferred
# when drawing dozens of lines or more at once.
offset = Vector2(0, 360)
draw_set_transform(margin + offset)
draw_multiline(points, Color.SKY_BLUE, line_width_thin, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_multiline(points, Color.SKY_BLUE, 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_multiline(points, Color.SKY_BLUE, 6.0 - antialiasing_width_offset, use_antialiasing)
# `draw_multiline_colors()` makes it possible to draw lines of different colors in a single
# draw command, although gradients are not possible this way (unlike `draw_polygon()` and `draw_polyline()`).
# This means the number of supplied colors must be equal to the number of segments, which means
# we have to only pass a subset of the colors array in this example.
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_multiline_colors(points, colors.slice(0, 3), line_width_thin, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_multiline_colors(points, colors.slice(0, 3), 2.0 - antialiasing_width_offset, use_antialiasing)
offset += Vector2(90, 0)
draw_set_transform(margin + offset)
draw_multiline_colors(points, colors.slice(0, 3), 6.0 - antialiasing_width_offset, use_antialiasing)

View File

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

View File

@@ -1,31 +0,0 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Custom Drawing in 2D"
config/description="A demo showing how to draw 2D elements in Godot without using nodes."
run/main_scene="uid://btxwm0qudsn3t"
config/features=PackedStringArray("4.5", "Mobile")
run/low_processor_mode=true
config/icon="res://icon.svg"
[debug]
gdscript/warnings/untyped_declaration=1
[display]
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[rendering]
renderer/rendering_method="mobile"

View File

@@ -1,146 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
func _draw() -> void:
var margin := Vector2(200, 40)
# Line width of `-1.0` is only usable with draw antialiasing disabled,
# as it uses hardware line drawing as opposed to polygon-based line drawing.
# Automatically use polygon-based line drawing when needed to avoid runtime warnings.
# We also use a line width of `0.5` instead of `1.0` to better match the appearance
# of non-antialiased line drawing, as draw antialiasing tends to make lines look thicker.
var line_width_thin := 0.5 if use_antialiasing else -1.0
# Make thick lines 1 pixel thinner when draw antialiasing is enabled,
# as draw antialiasing tends to make lines look thicker.
var antialiasing_width_offset := 1.0 if use_antialiasing else 0.0
var offset := Vector2()
draw_rect(
Rect2(margin + offset, Vector2(100, 50)),
Color.PURPLE,
false,
line_width_thin,
use_antialiasing
)
offset += Vector2(120, 0)
draw_rect(
Rect2(margin + offset, Vector2(100, 50)),
Color.PURPLE,
false,
2.0 - antialiasing_width_offset,
use_antialiasing
)
offset += Vector2(120, 0)
draw_rect(
Rect2(margin + offset, Vector2(100, 50)),
Color.PURPLE,
false,
6.0 - antialiasing_width_offset,
use_antialiasing
)
# Draw a filled rectangle. The width parameter is ignored for filled rectangles (it's set to `-1.0` to avoid warnings).
# We also reduce the rectangle's size by half the antialiasing width offset.
# Otherwise, the rectangle becomes very slightly larger when draw antialiasing is enabled.
offset += Vector2(120, 0)
draw_rect(
Rect2(margin + offset, Vector2(100, 50)).grow(-antialiasing_width_offset * 0.5),
Color.PURPLE,
true,
-1.0,
use_antialiasing
)
# `draw_set_transform()` is a stateful command: it affects *all* `draw_` methods within this
# `_draw()` function after it. This can be used to translate, rotate, or scale `draw_` methods
# that don't offer dedicated parameters for this (such as `draw_rect()` not having a rotation parameter).
# To reset back to the initial transform, call `draw_set_transform(Vector2())`.
offset += Vector2(170, 0)
draw_set_transform(margin + offset, deg_to_rad(22.5))
draw_rect(
Rect2(Vector2(), Vector2(100, 50)),
Color.PURPLE,
false,
line_width_thin,
use_antialiasing
)
offset += Vector2(120, 0)
draw_set_transform(margin + offset, deg_to_rad(22.5))
draw_rect(
Rect2(Vector2(), Vector2(100, 50)),
Color.PURPLE,
false,
2.0 - antialiasing_width_offset,
use_antialiasing
)
offset += Vector2(120, 0)
draw_set_transform(margin + offset, deg_to_rad(22.5))
draw_rect(
Rect2(Vector2(), Vector2(100, 50)),
Color.PURPLE,
false,
6.0 - antialiasing_width_offset,
use_antialiasing
)
# `draw_set_transform_matrix()` is a more advanced counterpart of `draw_set_transform()`.
# It can be used to apply transforms that are not supported by `draw_set_transform()`, such as
# skewing.
offset = Vector2(20, 60)
var custom_transform := get_transform().translated(margin + offset)
# Perform horizontal skewing (the rectangle will appear "slanted").
custom_transform.y.x -= 0.5
draw_set_transform_matrix(custom_transform)
draw_rect(
Rect2(Vector2(), Vector2(100, 50)),
Color.PURPLE,
false,
6.0 - antialiasing_width_offset,
use_antialiasing
)
draw_set_transform(Vector2())
offset = Vector2(0, 250)
var style_box_flat := StyleBoxFlat.new()
style_box_flat.set_border_width_all(4)
style_box_flat.set_corner_radius_all(8)
style_box_flat.shadow_size = 1
style_box_flat.shadow_offset = Vector2(4, 4)
style_box_flat.shadow_color = Color.RED
style_box_flat.anti_aliasing = use_antialiasing
draw_style_box(style_box_flat, Rect2(margin + offset, Vector2(100, 50)))
offset += Vector2(130, 0)
var style_box_flat_2 := StyleBoxFlat.new()
style_box_flat_2.draw_center = false
style_box_flat_2.set_border_width_all(4)
style_box_flat_2.set_corner_radius_all(8)
style_box_flat_2.corner_detail = 1
style_box_flat_2.border_color = Color.GREEN
style_box_flat_2.anti_aliasing = use_antialiasing
draw_style_box(style_box_flat_2, Rect2(margin + offset, Vector2(100, 50)))
offset += Vector2(160, 0)
var style_box_flat_3 := StyleBoxFlat.new()
style_box_flat_3.draw_center = false
style_box_flat_3.set_border_width_all(4)
style_box_flat_3.set_corner_radius_all(8)
style_box_flat_3.border_color = Color.CYAN
style_box_flat_3.shadow_size = 40
style_box_flat_3.shadow_offset = Vector2()
style_box_flat_3.shadow_color = Color.CORNFLOWER_BLUE
style_box_flat_3.anti_aliasing = use_antialiasing
custom_transform = get_transform().translated(margin + offset)
# Perform vertical skewing (the rectangle will appear "slanted").
custom_transform.x.y -= 0.5
draw_set_transform_matrix(custom_transform)
draw_style_box(style_box_flat_3, Rect2(Vector2(), Vector2(100, 50)))
draw_set_transform(Vector2())

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -1,60 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
func _draw() -> void:
var font := get_theme_default_font()
const FONT_SIZE = 24
const STRING = "Hello world!"
var margin := Vector2(240, 60)
var offset := Vector2()
var advance := Vector2()
for character in STRING:
# Draw each character with a random pastel color.
# Notice how the advance calculated on the loop's previous iteration is used as an offset here.
draw_char(font, margin + offset + advance, character, FONT_SIZE, Color.from_hsv(randf(), 0.4, 1.0))
# Get the glyph index of the character we've just drawn, so we can retrieve the glyph advance.
# This determines the spacing between glyphs so the next character is positioned correctly.
var glyph_idx := TextServerManager.get_primary_interface().font_get_glyph_index(
get_theme_default_font().get_rids()[0],
FONT_SIZE,
character.unicode_at(0),
0
)
advance.x += TextServerManager.get_primary_interface().font_get_glyph_advance(
get_theme_default_font().get_rids()[0],
FONT_SIZE,
glyph_idx
).x
offset += Vector2(0, 32)
# When drawing a font outline, it must be drawn *before* the main text.
# This way, the outline appears behind the main text.
draw_string_outline(
font,
margin + offset,
STRING,
HORIZONTAL_ALIGNMENT_LEFT,
-1,
FONT_SIZE,
12,
Color.ORANGE.darkened(0.6)
)
# NOTE: Use `draw_multiline_string()` to draw strings that contain line breaks (`\n`) or with
# automatic line wrapping based on the specified width.
# A width of `-1` is used here, which means "no limit". If width is limited, the end of the string
# will be cut off if it doesn't fit within the specified width.
draw_string(
font,
margin + offset,
STRING,
HORIZONTAL_ALIGNMENT_LEFT,
-1,
FONT_SIZE,
Color.YELLOW
)

View File

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

View File

@@ -1,67 +0,0 @@
# This is a `@tool` script so that the custom 2D drawing can be seen in the editor.
@tool
extends Panel
var use_antialiasing: bool = false
func _draw() -> void:
const ICON = preload("res://icon.svg")
var margin := Vector2(260, 40)
var offset := Vector2()
# Draw a texture.
draw_texture(ICON, margin + offset, Color.WHITE)
# `draw_set_transform()` is a stateful command: it affects *all* `draw_` methods within this
# `_draw()` function after it. This can be used to translate, rotate, or scale `draw_` methods
# that don't offer dedicated parameters for this (such as `draw_rect()` not having a rotation parameter).
# To reset back to the initial transform, call `draw_set_transform(Vector2())`.
#
# Draw a rotated texture at half the scale of its original pixel size.
offset += Vector2(200, 20)
draw_set_transform(margin + offset, deg_to_rad(45.0), Vector2(0.5, 0.5))
draw_texture(ICON, Vector2(), Color.WHITE)
draw_set_transform(Vector2())
# Draw a stretched texture. In this example, the icon is 128×128 so it will be drawn at 2× scale.
offset += Vector2(70, -20)
draw_texture_rect(
ICON,
Rect2(margin + offset, Vector2(256, 256)),
false,
Color.GREEN
)
# Draw a tiled texture. In this example, the icon is 128×128 so it will be drawn twice on each axis.
offset += Vector2(270, 0)
draw_texture_rect(
ICON,
Rect2(margin + offset, Vector2(256, 256)),
true,
Color.GREEN
)
offset = Vector2(0, 300)
draw_texture_rect_region(
ICON,
Rect2(margin + offset, Vector2(128, 128)),
Rect2(Vector2(32, 32), Vector2(64, 64)),
Color.VIOLET
)
# Draw a tiled texture from a region that is larger than the original texture size (128×128).
# Transposing is enabled, which will rotate the image by 90 degrees counter-clockwise.
# (For more advanced transforms, use `draw_set_transform()` before calling `draw_texture_rect_region()`.)
#
# For tiling to work with this approach, the CanvasItem in which this `_draw()` method is called
# must have its Repeat property set to Enabled in the inspector.
offset += Vector2(140, 0)
draw_texture_rect_region(
ICON,
Rect2(margin + offset, Vector2(128, 128)),
Rect2(Vector2(), Vector2(512, 512)),
Color.VIOLET,
true
)

View File

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

View File

@@ -12,9 +12,7 @@ Language: GDScript
Renderer: Compatibility
> [!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 C# version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/mono/dodge_the_creeps).
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/2712
@@ -26,8 +24,8 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/
## Copying
`art/House In a Forest Loop.ogg` Copyright &copy; 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](https://creativecommons.org/licenses/by/3.0/). Source: https://opengameart.org/content/loop-house-in-a-forest
`art/House In a Forest Loop.ogg` Copyright &copy; 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](http://creativecommons.org/licenses/by/3.0/). Source: https://opengameart.org/content/loop-house-in-a-forest
Images are from "Abstract Platformer". Created in 2016 by kenney.nl, [CC0 1.0 Universal](https://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`.

View File

@@ -2,7 +2,7 @@
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://sgfduhhw4pno"
uid="uid://q2pf4fr8d0ks"
path="res://.godot/imported/House In a Forest Loop.ogg-1a6a72ae843ad792b7039931227e8d50.oggvorbisstr"
[deps]
@@ -13,7 +13,7 @@ dest_files=["res://.godot/imported/House In a Forest Loop.ogg-1a6a72ae843ad792b7
[params]
loop=true
loop_offset=0.0
bpm=0.0
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dun74wipekpfq"
uid="uid://yqglrrsx7j1f"
path="res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6332e9489.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://vusf51hepduk"
uid="uid://bpot8awhdn6ph"
path="res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3cd932c076.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3c
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d182mv7y80xqy"
uid="uid://5lvm88ij4jqn"
path="res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e98a3d80.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dmgglhdyowipd"
uid="uid://bng45cvsgufqc"
path="res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340bd4a0a62.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340b
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dgwhuvn7qb4iy"
uid="uid://bu4221t7qpa7d"
path="res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc1e6471.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dyw702efe6meu"
uid="uid://booij5t7h4efb"
path="res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb0436246b935.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb04362
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="wav"
type="AudioStreamWAV"
uid="uid://td2mgko63p61"
uid="uid://dw26fpygeag8o"
path="res://.godot/imported/gameover.wav-98c95c744b35280048c2bd093cf8a356.sample"
[deps]
@@ -21,4 +21,4 @@ edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2
compress/mode=0

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bcow5c46vixno"
uid="uid://b4yyoafu8bi0q"
path="res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314d44564.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dw3lwgwhpbfx8"
uid="uid://bko65a0nd66st"
path="res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa7552ee79.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa75
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b2aofu01vxvea"
uid="uid://ftkxr8r4qghp"
path="res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4458c2742.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ddjou2q6gxlfr"
uid="uid://couyhcegeihme"
path="res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c51884043.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://bgv586r20ps8e"
uid="uid://cit6gwe5px1q8"
path="res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e2bb73fba.fontdata"
[deps]
@@ -15,16 +15,13 @@ dest_files=["res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
subpixel_positioning=4
keep_rounding_remainders=true
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]

View File

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

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://b0efehuavobda"]
[gd_scene load_steps=5 format=3 uid="uid://ccqoreueuxdb7"]
[ext_resource type="Script" uid="uid://c1g57034r2c0" path="res://hud.gd" id="1"]
[ext_resource type="FontFile" uid="uid://bgv586r20ps8e" path="res://fonts/Xolonium-Regular.ttf" id="2_2jm3i"]
[ext_resource type="Script" path="res://hud.gd" id="1"]
[ext_resource type="FontFile" uid="uid://cit6gwe5px1q8" path="res://fonts/Xolonium-Regular.ttf" id="2_2jm3i"]
[sub_resource type="InputEventAction" id="InputEventAction_fopy7"]
action = &"start_game"

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dfklrdtaun0xt"
uid="uid://brwp8bimc75uu"
path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ct
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -46,7 +46,6 @@ func _on_MobTimer_timeout():
# Spawn the mob by adding it to the Main scene.
add_child(mob)
func _on_ScoreTimer_timeout():
score += 1
$HUD.update_score(score)

View File

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

View File

@@ -1,11 +1,11 @@
[gd_scene load_steps=8 format=3 uid="uid://bggkaprn62fwm"]
[gd_scene load_steps=8 format=3 uid="uid://cyfwty2q3rdse"]
[ext_resource type="Script" uid="uid://c4wt6ace7hycd" path="res://main.gd" id="1_0r6n5"]
[ext_resource type="PackedScene" uid="uid://cao351pllxqpa" path="res://mob.tscn" id="2_50pww"]
[ext_resource type="PackedScene" uid="uid://bwhlkliwp13p4" path="res://player.tscn" id="3_veqnc"]
[ext_resource type="PackedScene" uid="uid://b0efehuavobda" path="res://hud.tscn" id="4_0qnje"]
[ext_resource type="AudioStream" uid="uid://sgfduhhw4pno" path="res://art/House In a Forest Loop.ogg" id="5_55d8h"]
[ext_resource type="AudioStream" uid="uid://td2mgko63p61" path="res://art/gameover.wav" id="6_hp1r0"]
[ext_resource type="Script" path="res://main.gd" id="1_0r6n5"]
[ext_resource type="PackedScene" uid="uid://rkdnhqgf2hpj" path="res://mob.tscn" id="2_50pww"]
[ext_resource type="PackedScene" uid="uid://4vwrqjegqwpj" path="res://player.tscn" id="3_veqnc"]
[ext_resource type="PackedScene" uid="uid://ccqoreueuxdb7" path="res://hud.tscn" id="4_0qnje"]
[ext_resource type="AudioStream" uid="uid://q2pf4fr8d0ks" path="res://art/House In a Forest Loop.ogg" id="5_55d8h"]
[ext_resource type="AudioStream" uid="uid://dw26fpygeag8o" path="res://art/gameover.wav" id="6_hp1r0"]
[sub_resource type="Curve2D" id="1"]
_data = {

View File

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

View File

@@ -1,44 +1,26 @@
[gd_scene load_steps=10 format=3 uid="uid://cao351pllxqpa"]
[gd_scene load_steps=10 format=3 uid="uid://rkdnhqgf2hpj"]
[ext_resource type="Script" uid="uid://cypxpb8arjrqt" path="res://mob.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://dun74wipekpfq" path="res://art/enemyFlyingAlt_1.png" id="2"]
[ext_resource type="Texture2D" uid="uid://vusf51hepduk" path="res://art/enemyFlyingAlt_2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://dgwhuvn7qb4iy" path="res://art/enemyWalking_1.png" id="4"]
[ext_resource type="Texture2D" uid="uid://dyw702efe6meu" path="res://art/enemyWalking_2.png" id="5"]
[ext_resource type="Texture2D" uid="uid://d182mv7y80xqy" path="res://art/enemySwimming_1.png" id="6"]
[ext_resource type="Texture2D" uid="uid://dmgglhdyowipd" path="res://art/enemySwimming_2.png" id="7"]
[ext_resource type="Script" path="res://mob.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://yqglrrsx7j1f" path="res://art/enemyFlyingAlt_1.png" id="2"]
[ext_resource type="Texture2D" uid="uid://bpot8awhdn6ph" path="res://art/enemyFlyingAlt_2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://bu4221t7qpa7d" path="res://art/enemyWalking_1.png" id="4"]
[ext_resource type="Texture2D" uid="uid://booij5t7h4efb" path="res://art/enemyWalking_2.png" id="5"]
[ext_resource type="Texture2D" uid="uid://5lvm88ij4jqn" path="res://art/enemySwimming_1.png" id="6"]
[ext_resource type="Texture2D" uid="uid://bng45cvsgufqc" path="res://art/enemySwimming_2.png" id="7"]
[sub_resource type="SpriteFrames" id="1"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2")
}, {
"duration": 1.0,
"texture": ExtResource("3")
}],
"loop": true,
"name": &"fly",
"speed": 3.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("6")
}, {
"duration": 1.0,
"texture": ExtResource("7")
}],
"frames": [ExtResource( "6" ), ExtResource( "7" )],
"loop": true,
"name": &"swim",
"speed": 4.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("4")
"frames": [ExtResource( "2" ), ExtResource( "3" )],
"loop": true,
"name": &"fly",
"speed": 3.0
}, {
"duration": 1.0,
"texture": ExtResource("5")
}],
"frames": [ExtResource( "4" ), ExtResource( "5" )],
"loop": true,
"name": &"walk",
"speed": 4.0
@@ -48,19 +30,19 @@ animations = [{
radius = 37.0
height = 100.0
[node name="Mob" type="RigidBody2D" groups=["mobs"]]
[node name="Mob" type="RigidDynamicBody2D" groups=["mobs"]]
collision_mask = 0
gravity_scale = 0.0
script = ExtResource("1")
script = ExtResource( "1" )
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
scale = Vector2(0.75, 0.75)
sprite_frames = SubResource("1")
frames = SubResource( "1" )
animation = &"walk"
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
rotation = 1.5708
shape = SubResource("2")
shape = SubResource( "2" )
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]

View File

@@ -1 +0,0 @@
uid://6s0lxctks3qn

View File

@@ -1,10 +1,10 @@
[gd_scene load_steps=13 format=3 uid="uid://bwhlkliwp13p4"]
[gd_scene load_steps=13 format=3 uid="uid://4vwrqjegqwpj"]
[ext_resource type="Script" uid="uid://6s0lxctks3qn" path="res://player.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://b2aofu01vxvea" path="res://art/playerGrey_walk1.png" id="2"]
[ext_resource type="Texture2D" uid="uid://ddjou2q6gxlfr" path="res://art/playerGrey_walk2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://bcow5c46vixno" path="res://art/playerGrey_up1.png" id="4"]
[ext_resource type="Texture2D" uid="uid://dw3lwgwhpbfx8" path="res://art/playerGrey_up2.png" id="5"]
[ext_resource type="Script" path="res://player.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://ftkxr8r4qghp" path="res://art/playerGrey_walk1.png" id="2"]
[ext_resource type="Texture2D" uid="uid://couyhcegeihme" path="res://art/playerGrey_walk2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://b4yyoafu8bi0q" path="res://art/playerGrey_up1.png" id="4"]
[ext_resource type="Texture2D" uid="uid://bko65a0nd66st" path="res://art/playerGrey_up2.png" id="5"]
[sub_resource type="SpriteFrames" id="1"]
animations = [{
@@ -68,8 +68,8 @@ shape = SubResource("2")
[node name="Trail" type="GPUParticles2D" parent="."]
z_index = -1
amount = 10
process_material = SubResource("7")
texture = ExtResource("2")
speed_scale = 2.0
process_material = SubResource("7")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]

View File

@@ -19,7 +19,7 @@ tutorial in the documentation. For more details, consider
following the tutorial in the documentation."
config/tags=PackedStringArray("2d", "demo", "official")
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.5")
config/features=PackedStringArray("4.2")
config/icon="res://icon.webp"
[display]
@@ -34,40 +34,40 @@ window/stretch/mode="canvas_items"
move_left={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
]
}
move_right={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":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.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
]
}
move_down={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
]
}
start_game={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"echo":false,"script":null)
]
}

View File

@@ -10,11 +10,6 @@ Renderer: Compatibility
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/2713
## Note
The new TileMapLayer introduced in Godot 4.3 allows disabling collisions for a layer dynamically using a checkbox in the inspector.
For earlier Godot versions use the procedure described here.
## Screenshots
![Screenshot](screenshots/fake_wall.png)

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bu5nu8i7xk5ot"
uid="uid://bpov140lx7at3"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.cte
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ddtguaos7uvsy"
uid="uid://cs8h2qyuakmko"
path="res://.godot/imported/obstacle.png-06287f6b2d26dd03335fd87ab78c2cc2.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/obstacle.png-06287f6b2d26dd03335fd87ab78c2cc2
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,7 +1,7 @@
extends TileMapLayer
# You can have multiple layers if you make this an array.
var player_in_secret: bool = false
var player_in_secret := false
var layer_alpha := 1.0

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://gewi7do50xix"
uid="uid://dfb8rr2fakwgp"
path="res://.godot/imported/player.png-1ad27fc2a62fa126eae918723933dd6f.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/player.png-1ad27fc2a62fa126eae918723933dd6f.c
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://dpgskpm8nrjyt"]
[gd_scene load_steps=4 format=3 uid="uid://1o70ce0fv10w"]
[ext_resource type="Script" uid="uid://brtb2376s322w" path="res://player/player.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://gewi7do50xix" path="res://player/player.png" id="2"]
[ext_resource type="Script" path="res://player/player.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://dfb8rr2fakwgp" path="res://player/player.png" id="2"]
[sub_resource type="RectangleShape2D" id="1"]
size = Vector2(14, 14)

View File

@@ -16,7 +16,7 @@ CharacterBody2D. The character moves around, is affected by moving
platforms, can jump through one-way collision platforms, etc."
config/tags=PackedStringArray("2d", "demo", "official", "tilemap")
run/main_scene="res://world.tscn"
config/features=PackedStringArray("4.5")
config/features=PackedStringArray("4.3")
config/icon="res://icon.png"
[debug]
@@ -63,7 +63,6 @@ move_right={
common/physics_ticks_per_second=120
2d/default_gravity=500
common/physics_interpolation=true
[rendering]

View File

@@ -1,8 +1,8 @@
[gd_scene load_steps=8 format=4 uid="uid://dwfnfhdnt8c6g"]
[gd_scene load_steps=8 format=4 uid="uid://de7qapkqfycxl"]
[ext_resource type="Texture2D" uid="uid://ddtguaos7uvsy" path="res://level/obstacle.png" id="2"]
[ext_resource type="Script" uid="uid://bu8761rfem0qo" path="res://level/tile_map.gd" id="2_q8fhk"]
[ext_resource type="PackedScene" uid="uid://dpgskpm8nrjyt" path="res://player/player.tscn" id="3"]
[ext_resource type="Texture2D" uid="uid://cs8h2qyuakmko" path="res://level/obstacle.png" id="2"]
[ext_resource type="Script" path="res://level/tile_map.gd" id="2_q8fhk"]
[ext_resource type="PackedScene" uid="uid://1o70ce0fv10w" path="res://player/player.tscn" id="3"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_on5ov"]
@@ -34,7 +34,6 @@ script = ExtResource("2_q8fhk")
[node name="Camera2D" type="Camera2D" parent="."]
offset = Vector2(265, 247)
process_callback = 0
[node name="Player" parent="." instance=ExtResource("3")]
position = Vector2(120, 456)

View File

@@ -1,9 +1,9 @@
[gd_scene load_steps=9 format=3 uid="uid://c5wi3c5syuikd"]
[gd_scene load_steps=9 format=3 uid="uid://dmn8nkpogiwsf"]
[ext_resource type="PackedScene" uid="uid://dsqn0vre7npvu" path="res://player/Player.tscn" id="1"]
[ext_resource type="FontFile" uid="uid://nv3lhuvgflbt" path="res://fonts/SourceCodePro-Bold.ttf" id="2_r1c5f"]
[ext_resource type="PackedScene" uid="uid://b4j5pvcv4ksxw" path="res://debug/StatesStackDiplayer.tscn" id="3"]
[ext_resource type="PackedScene" uid="uid://ywml2fct1qf5" path="res://debug/ControlsPanel.tscn" id="4"]
[ext_resource type="PackedScene" uid="uid://bpdyvy2681m3i" path="res://player/Player.tscn" id="1"]
[ext_resource type="FontFile" uid="uid://b5bspum6ffekd" path="res://fonts/SourceCodePro-Bold.ttf" id="2_r1c5f"]
[ext_resource type="PackedScene" uid="uid://cvi13chv8g4hj" path="res://debug/StatesStackDiplayer.tscn" id="3"]
[ext_resource type="PackedScene" uid="uid://bq6rrfy53rfvo" path="res://debug/ControlsPanel.tscn" id="4"]
[sub_resource type="Animation" id="1"]
@@ -26,9 +26,9 @@ tracks/0/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_qbwwp"]
_data = {
&"idle": SubResource("1"),
&"stagger": SubResource("2"),
&"walk": SubResource("3")
"idle": SubResource("1"),
"stagger": SubResource("2"),
"walk": SubResource("3")
}
[node name="Demo" type="Node"]
@@ -41,11 +41,10 @@ start_state = NodePath("Idle")
[node name="AnimationPlayer" parent="Player" index="1"]
libraries = {
&"": SubResource("AnimationLibrary_qbwwp")
"": SubResource("AnimationLibrary_qbwwp")
}
[node name="StateNameDisplayer" parent="Player" index="5"]
physics_interpolation_mode = 1
theme_override_fonts/font = ExtResource("2_r1c5f")
[node name="Explanations" type="RichTextLabel" parent="."]

View File

@@ -1,4 +1,4 @@
[gd_scene format=3 uid="uid://ywml2fct1qf5"]
[gd_scene format=3 uid="uid://bq6rrfy53rfvo"]
[node name="ControlsPanel" type="Panel"]
anchors_preset = 1

View File

@@ -1,4 +1,4 @@
[gd_scene format=3 uid="uid://b2jd1klfmq7jp"]
[gd_scene format=3 uid="uid://bywptem1jb35a"]
[node name="Explanations" type="RichTextLabel"]
anchors_preset = 15

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://b4j5pvcv4ksxw"]
[gd_scene load_steps=3 format=3 uid="uid://cvi13chv8g4hj"]
[ext_resource type="Script" uid="uid://h4p2eq3snhjs" path="res://debug/states_stack_displayer.gd" id="1"]
[ext_resource type="FontFile" uid="uid://nv3lhuvgflbt" path="res://fonts/SourceCodePro-Bold.ttf" id="2_58if7"]
[ext_resource type="Script" path="res://debug/states_stack_displayer.gd" id="1"]
[ext_resource type="FontFile" uid="uid://b5bspum6ffekd" path="res://fonts/SourceCodePro-Bold.ttf" id="2_58if7"]
[node name="StatesStackDiplayer" type="Panel"]
offset_right = 210.0

View File

@@ -3,8 +3,8 @@ extends Panel
@onready var fsm_node: Node = get_node(^"../../Player/StateMachine")
func _process(_delta: float) -> void:
var states_names: String = ""
var numbers: String = ""
var states_names := ""
var numbers := ""
var index := 0
for state: Node in fsm_node.states_stack:

View File

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

View File

@@ -2,7 +2,7 @@
importer="font_data_dynamic"
type="FontFile"
uid="uid://nv3lhuvgflbt"
uid="uid://b5bspum6ffekd"
path="res://.godot/imported/SourceCodePro-Bold.ttf-bf03bd9c90603419d32725fc00754bf7.fontdata"
[deps]
@@ -15,16 +15,13 @@ dest_files=["res://.godot/imported/SourceCodePro-Bold.ttf-bf03bd9c90603419d32725
Rendering=null
antialiasing=1
generate_mipmaps=false
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
subpixel_positioning=4
keep_rounding_remainders=true
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://gh22fu6herde"
uid="uid://brwp8bimc75uu"
path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ct
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,19 +1,19 @@
[gd_scene load_steps=19 format=3 uid="uid://dsqn0vre7npvu"]
[gd_scene load_steps=19 format=3 uid="uid://bpdyvy2681m3i"]
[ext_resource type="Script" uid="uid://bctcyb2y6vuvd" path="res://player/player_controller.gd" id="1"]
[ext_resource type="Script" uid="uid://c5dcvd5nvu0e0" path="res://player/player_state_machine.gd" id="2"]
[ext_resource type="Script" uid="uid://b62dqs7qjx007" path="res://player/states/motion/on_ground/idle.gd" id="3"]
[ext_resource type="Script" uid="uid://c8ngtisnb8frh" path="res://player/states/motion/on_ground/move.gd" id="4"]
[ext_resource type="Script" uid="uid://8ytqj8c1k3qs" path="res://player/states/motion/in_air/jump.gd" id="5"]
[ext_resource type="Script" uid="uid://bul61icehhvnh" path="res://player/states/combat/stagger.gd" id="6"]
[ext_resource type="Script" uid="uid://carcuc5mfmg4d" path="res://player/states/combat/attack.gd" id="7"]
[ext_resource type="Script" uid="uid://byy33gmrsievj" path="res://player/states/die.gd" id="8"]
[ext_resource type="Texture2D" uid="uid://dlpmesnd2veay" path="res://player/shadow.png" id="9"]
[ext_resource type="Texture2D" uid="uid://crgo36sk7sfdg" path="res://player/body.png" id="10"]
[ext_resource type="Script" uid="uid://c3h6s4u67cogm" path="res://player/bullet/bullet_spawner.gd" id="11"]
[ext_resource type="Script" uid="uid://beommici1nnah" path="res://player/weapon/weapon_pivot.gd" id="12"]
[ext_resource type="PackedScene" uid="uid://bgy8u8c4ge6oo" path="res://player/weapon/Sword.tscn" id="13"]
[ext_resource type="Script" uid="uid://qc5os1n5tx4u" path="res://player/states/debug/state_name_displayer.gd" id="15"]
[ext_resource type="Script" path="res://player/player_controller.gd" id="1"]
[ext_resource type="Script" path="res://player/player_state_machine.gd" id="2"]
[ext_resource type="Script" path="res://player/states/motion/on_ground/idle.gd" id="3"]
[ext_resource type="Script" path="res://player/states/motion/on_ground/move.gd" id="4"]
[ext_resource type="Script" path="res://player/states/motion/in_air/jump.gd" id="5"]
[ext_resource type="Script" path="res://player/states/combat/stagger.gd" id="6"]
[ext_resource type="Script" path="res://player/states/combat/attack.gd" id="7"]
[ext_resource type="Script" path="res://player/states/die.gd" id="8"]
[ext_resource type="Texture2D" uid="uid://eds33w28pilu" path="res://player/shadow.png" id="9"]
[ext_resource type="Texture2D" uid="uid://ds53oxkqrcumd" path="res://player/body.png" id="10"]
[ext_resource type="Script" path="res://player/bullet/bullet_spawner.gd" id="11"]
[ext_resource type="Script" path="res://player/weapon/weapon_pivot.gd" id="12"]
[ext_resource type="PackedScene" uid="uid://cdacdp11r3jua" path="res://player/weapon/Sword.tscn" id="13"]
[ext_resource type="Script" path="res://player/states/debug/state_name_displayer.gd" id="15"]
[sub_resource type="Animation" id="1"]
@@ -36,9 +36,9 @@ tracks/0/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vi1hn"]
_data = {
&"idle": SubResource("1"),
&"stagger": SubResource("2"),
&"walk": SubResource("3")
"idle": SubResource("1"),
"stagger": SubResource("2"),
"walk": SubResource("3")
}
[node name="Player" type="CharacterBody2D"]
@@ -67,7 +67,7 @@ script = ExtResource("8")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_vi1hn")
"": SubResource("AnimationLibrary_vi1hn")
}
[node name="Shadow" type="Sprite2D" parent="."]

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://crgo36sk7sfdg"
uid="uid://ds53oxkqrcumd"
path="res://.godot/imported/body.png-313f6363670a5852a7b7126ab476d8b1.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/body.png-313f6363670a5852a7b7126ab476d8b1.cte
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://73q3byvg30en"]
[gd_scene load_steps=3 format=3 uid="uid://b6uru8lfx45ma"]
[ext_resource type="Script" uid="uid://b44c6s1shm5f7" path="res://player/bullet/bullet.gd" id="1"]
[ext_resource type="Script" path="res://player/bullet/bullet.gd" id="1"]
[sub_resource type="CircleShape2D" id="1"]
radius = 12.0

View File

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

View File

@@ -2,8 +2,8 @@ extends Node2D
var bullet := preload("Bullet.tscn")
func _unhandled_input(input_event: InputEvent) -> void:
if input_event.is_action_pressed(&"fire"):
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("fire"):
fire()
@@ -13,6 +13,6 @@ func fire() -> void:
$CooldownTimer.start()
var new_bullet := bullet.instantiate()
add_child(new_bullet)
new_bullet.position = global_position
new_bullet.direction = owner.look_direction
add_child(new_bullet)

View File

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

View File

@@ -10,7 +10,6 @@ var look_direction := Vector2.RIGHT:
look_direction = value
set_look_direction(value)
func take_damage(attacker: Node, amount: float, effect: Node = null) -> void:
if is_ancestor_of(attacker):
return

View File

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

View File

@@ -1,13 +0,0 @@
extends "res://state_machine/state.gd"
const PLAYER_STATE: Dictionary[StringName, StringName]= {
&"previous": &"previous",
&"jump": &"jump",
&"idle": &"idle",
&"move": &"move",
&"stagger": &"stagger",
&"attack": &"attack",
&"die": &"die",
&"dead": &"dead",
&"walk": &"walk",
}

View File

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

View File

@@ -1,7 +1,5 @@
extends "res://state_machine/state_machine.gd"
var PLAYER_STATE = preload("res://player/player_state.gd").PLAYER_STATE
@onready var idle: Node = $Idle
@onready var move: Node = $Move
@onready var jump: Node = $Jump
@@ -10,11 +8,11 @@ var PLAYER_STATE = preload("res://player/player_state.gd").PLAYER_STATE
func _ready() -> void:
states_map = {
PLAYER_STATE.idle: idle,
PLAYER_STATE.move: move,
PLAYER_STATE.jump: jump,
PLAYER_STATE.stagger: stagger,
PLAYER_STATE.attack: attack,
"idle": idle,
"move": move,
"jump": jump,
"stagger": stagger,
"attack": attack,
}
@@ -22,22 +20,21 @@ func _change_state(state_name: String) -> void:
# The base state_machine interface this node extends does most of the work.
if not _active:
return
if state_name in [PLAYER_STATE.stagger, PLAYER_STATE.jump, PLAYER_STATE.attack]:
if state_name in ["stagger", "jump", "attack"]:
states_stack.push_front(states_map[state_name])
if state_name == PLAYER_STATE.jump and current_state == move:
if state_name == "jump" and current_state == move:
jump.initialize(move.speed, move.velocity)
super._change_state(state_name)
func _unhandled_input(input_event: InputEvent) -> void:
func _unhandled_input(event: InputEvent) -> void:
# Here we only handle input that can interrupt states, attacking in this case,
# otherwise we let the state node handle it.
if input_event.is_action_pressed(PLAYER_STATE.attack):
if event.is_action_pressed("attack"):
if current_state in [attack, stagger]:
return
_change_state(PLAYER_STATE.attack)
_change_state("attack")
return
current_state.handle_input(input_event)
current_state.handle_input(event)

View File

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

View File

@@ -2,7 +2,7 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dlpmesnd2veay"
uid="uid://eds33w28pilu"
path="res://.godot/imported/shadow.png-493c4635eca1ce8bdece629560617dc7.ctex"
metadata={
"vram_texture": false
@@ -18,8 +18,6 @@ dest_files=["res://.godot/imported/shadow.png-493c4635eca1ce8bdece629560617dc7.c
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -27,10 +25,6 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false

View File

@@ -1,8 +1,8 @@
extends "res://player/player_state.gd"
extends "res://state_machine/state.gd"
func enter() -> void:
owner.get_node(^"AnimationPlayer").play(PLAYER_STATE.idle)
owner.get_node(^"AnimationPlayer").play("idle")
func _on_Sword_attack_finished() -> void:
finished.emit(PLAYER_STATE.previous)
finished.emit("previous")

View File

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

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