Compare commits

..

1 Commits

Author SHA1 Message Date
William Tumeo
ed9494f251 free coin in 3D platformer
(cherry picked from commit 76bfb10deb)
2016-11-16 19:17:44 +01:00
4523 changed files with 16634 additions and 166614 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

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

4
.gitattributes vendored
View File

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

13
.github/CODEOWNERS vendored
View File

@@ -1,13 +0,0 @@
# Lines starting with '#' are comments.
# Each line is a file pattern followed by one or more owners.
# Owners can be @users, @org/teams or emails
/.github/dist/ @Calinou
/3d/voxel/ @aaronfranke
/misc/matrix_transform/ @aaronfranke
/misc/2.5d/ @aaronfranke
/mono/2.5d/ @aaronfranke
/2d/physics_tests/ @pouleyKetchoupp
/3d/physics_tests/ @pouleyKetchoupp

View File

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

View File

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

View File

@@ -1,7 +0,0 @@
<!--
Please target the `master` branch in priority.
PRs can target `3.x` if the same change was done in `master`, or is not relevant there.
Relevant fixes are cherry-picked for stable branches as needed by maintainers.
You can mention in the description if the change is compatible with `3.x`.
-->

View File

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

View File

@@ -1,41 +0,0 @@
[preset.0]
name="Web"
platform="Web"
runnable=true
advanced_options=false
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
variant/thread_support=true
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=true
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=true
progressive_web_app/enabled=true
progressive_web_app/ensure_cross_origin_isolation_headers=true
progressive_web_app/offline_page=""
progressive_web_app/display=0
progressive_web_app/orientation=1
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)

View File

@@ -1,38 +0,0 @@
<!-- The list of demos will be inserted above by the CI process. -->
</ul>
<h2>Unavailable demos</h2>
<ul class="unsupported-demos">
<li><code>2d/glow</code>: Not supported on the Compatibility rendering method (which the web platform always uses).</li>
<li><code>2d/navigation_mesh_chunks</code>: Relies on debug-only drawing functionality which is not available in projects exported in release mode.</li>
<li><code>2d/physics_tests</code>: Relies on debug-only drawing functionality which is not available in projects exported in release mode.</li>
<li><code>3d/labels_and_texts</code>: Does not export in headless mode due to an engine bug (font importing infinite loop).</li>
<li><code>3d/decals</code>: Not supported on the Compatibility rendering method (which the web platform always uses).</li>
<li><code>3d/ik</code>: Demo is not fully ported to Godot 4 yet (even though the feature works on the web).</li>
<li><code>3d/navigation_mesh_chunks</code>: Relies on debug-only drawing functionality which is not available in projects exported in release mode.</li>
<li><code>3d/occlusion_culling_mesh_lod</code>: Occlusion culling is disabled by default in web builds to decrease binary size.</li>
<li><code>3d/particles</code>: Demo mostly showcases features that are not available in Compatibility (which the web platform always uses).</li>
<li><code>3d/physical_light_camera_units</code>: Demo is not tuned for the Compatibility rendering method (which the web platform always uses).</li>
<li><code>3d/physics_tests</code>: Relies on debug-only drawing functionality which is not available in projects exported in release mode.</li>
<li><code>3d/variable_rate_shading</code>: Not supported on the Compatibility rendering method (which the web platform always uses)</li>
<li><code>3d/volumetric_fog</code>: Not supported on the Compatibility rendering method (which the web platform always uses)</li>
<li><code>3d/voxel</code>: Freezes after a few seconds of gameplay due to web platform-specific threading issues.</li>
<li><code>audio/bpm_sync</code>: Not functional on the web platform due to differences in the audio playback implementation.</li>
<li><code>audio/device_changer</code>: Not relevant for the web platform, as the web browser always chooses the audio output device.</li>
<li><code>audio/midi_piano</code>: Not functional on the web platform due to differences in the audio playback implementation.</li>
<li><code>audio/spectrum</code>: Not functional on the web platform due to differences in the audio playback implementation.</li>
<li><code>compute/*</code>: Not supported on the Compatibility rendering method (which the web platform always uses).</li>
<li><code>gui/msdf_font</code>: Does not export in headless mode due to an engine bug (font importing crashes).</li>
<li><code>gui/translation</code>: Does not export in headless mode due to an engine bug (font importing crashes).</li>
<li><code>loading/runtime_save_load</code>: Native filesystem access is not available on the web platform.</li>
<li><code>misc/compute_shader_heightmap</code>: Not supported on the Compatibility rendering method (which the web platform always uses).</li>
<li><code>misc/large_world_coordinates</code>: Not supported on the Compatibility rendering method (which the web platform always uses).</li>
<li><code>misc/matrix_transform</code>: Results are only visible in the editor.</li>
<li><code>mobile/android_iap</code>: Only relevant on native Android.</li>
<li><code>mobile/sensors</code>: Not supported on the web platform.</li>
<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>
</ul>
</body>
</html>

View File

@@ -1,130 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Official Godot demos exported to Web</title>
<style>
:root {
--background-color: #fff;
--text-color: #222;
--link-color: hsl(220, 100%, 45%);
--link-visited-color: hsl(270, 100%, 55%);
--link-underline-color: hsla(220, 100%, 45%, 0.3);
--link-underline-visited-color: hsla(270, 100%, 45%, 0.3);
}
@media (prefers-color-scheme: dark) {
:root {
--background-color: #222;
--text-color: #eee;
--link-color: hsl(200, 100%, 70%);
--link-visited-color: hsl(250, 100%, 80%);
--link-underline-color: hsla(200, 100%, 70%, 0.3);
--link-underline-visited-color: hsla(250, 100%, 70%, 0.3);
}
}
*:focus {
/* More visible outline for better keyboard navigation. */
outline: 0.125rem solid hsl(220, 100%, 62.5%);
/* Make the outline always appear above other elements. */
position: relative;
}
html {
background-color: var(--background-color);
color: var(--text-color);
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
max-width: 50rem;
margin: 0 auto;
padding: 0.75rem;
line-height: 1.618rem;
}
h2 {
margin-top: 2.5rem;
}
a {
color: var(--link-color);
text-decoration-color: var(--link-underline-color);
text-decoration-thickness: 0.125rem;
}
a:visited {
color: var(--link-visited-color);
text-decoration-color: var(--link-visited-color);
}
a:hover {
filter: brightness(117.5%);
}
a:active {
filter: brightness(82.5%);
}
ul {
padding-left: 0;
}
li {
display: block;
}
li a {
display: inline-block;
width: 100%;
height: 4rem;
margin-left: 0.5rem;
}
li a:hover {
background-color: hsla(0, 0%, 50%, 0.1);
}
li a * {
float: left;
}
li a p {
height: 24px;
margin: 20px 10px;
}
.unsupported-demos li {
margin-bottom: 1.5rem;
}
</style>
</head>
<body>
<h1>Godot demo projects</h1>
<p>
This page lists
<a href="https://github.com/godotengine/godot-demo-projects">official Godot demo projects</a>
exported to the web for testing purposes. These projects are deployed automatically
on every commit on the <code>master</code> branch of the repository.
</p>
<p>
The web exports on this page are provided for demonstration purposes only.
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
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>
documentation for information on exporting your own projects to the web.
</p>
<h2>List of demos</h2>
<ul>
<!-- The list of demos will be inserted below by the CI process. -->

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

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

29
.gitignore vendored
View File

@@ -1,29 +0,0 @@
# Godot 4+ specific ignores
.godot/
# Godot-specific ignores
.import/
export.cfg
export_presets.cfg
# Dummy HTML5 export presets file for continuous integration
!.github/dist/export_presets.cfg
# Imported translations (automatically generated from CSV files)
*.translation
# Mono-specific ignores
.mono/
data_*/
mono_crash.*.json
# System/tool-specific ignores
.directory
.DS_Store
*~
*.blend1
# 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

@@ -1,8 +0,0 @@
# 2D Demos
These demos are all 2D, but otherwise do not have a common theme.
Languages: Most have GDScript, some have
[Godot shader language](https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/shading_language.html)
Renderers: Glow for 2D and Physics Platformer use Forward+, 2D Particles uses Mobile, and the rest use Compatibility

BIN
2d/area_input/box_area.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

5
2d/area_input/engine.cfg Normal file
View File

@@ -0,0 +1,5 @@
[application]
name="Area 2D Input Events"
main_scene="res://input.tscn"
icon="res://icon.png"

BIN
2d/area_input/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

15
2d/area_input/input.gd Normal file
View File

@@ -0,0 +1,15 @@
extends Area2D
# Virtual from CollisionObject2D (also available as signal)
func _input_event(viewport, event, shape_idx):
# Convert event to local coordinates
if (event.type == InputEvent.MOUSE_MOTION):
event = make_input_local(event)
get_node("label").set_text(str(event.pos))
# Virtual from CollisionObject2D (also available as signal)
func _mouse_exit():
get_node("label").set_text("")

109
2d/area_input/input.tscn Normal file
View File

@@ -0,0 +1,109 @@
[gd_scene load_steps=6 format=1]
[ext_resource path="res://input.gd" type="Script" id=1]
[ext_resource path="res://box_area.png" type="Texture" id=2]
[ext_resource path="res://circle_area.png" type="Texture" id=3]
[sub_resource type="RectangleShape2D" id=1]
custom_solver_bias = 0.0
extents = Vector2( 64, 64 )
[sub_resource type="CircleShape2D" id=2]
custom_solver_bias = 0.0
radius = 64.0
[node name="base" type="Node2D"]
[node name="box" type="Area2D" parent="."]
transform/pos = Vector2( 212, 281 )
transform/rot = 35.4081
input/pickable = true
shapes/0/shape = SubResource( 1 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
gravity_vec = Vector2( 0, 1 )
gravity = 98.0
linear_damp = 0.1
angular_damp = 1.0
script/script = ExtResource( 1 )
[node name="sprite" type="Sprite" parent="box"]
texture = ExtResource( 2 )
[node name="label" type="Label" parent="box"]
focus/ignore_mouse = true
focus/stop_mouse = true
size_flags/horizontal = 2
margin/left = -43.0
margin/top = 71.0
margin/right = 43.0
margin/bottom = 84.0
align = 1
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="shape" type="CollisionShape2D" parent="box"]
shape = SubResource( 1 )
trigger = false
_update_shape_index = -1
[node name="circle" type="Area2D" parent="."]
transform/pos = Vector2( 547.877, 286.808 )
transform/rot = -40.5985
input/pickable = true
shapes/0/shape = SubResource( 2 )
shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
shapes/0/trigger = false
gravity_vec = Vector2( 0, 1 )
gravity = 98.0
linear_damp = 0.1
angular_damp = 1.0
script/script = ExtResource( 1 )
[node name="sprite" type="Sprite" parent="circle"]
texture = ExtResource( 3 )
[node name="label" type="Label" parent="circle"]
focus/ignore_mouse = true
focus/stop_mouse = true
size_flags/horizontal = 2
margin/left = -43.0
margin/top = 71.0
margin/right = 43.0
margin/bottom = 84.0
align = 1
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="shape" type="CollisionShape2D" parent="circle"]
shape = SubResource( 2 )
trigger = false
_update_shape_index = -1
[node name="Label" type="Label" parent="."]
focus/ignore_mouse = true
focus/stop_mouse = true
size_flags/horizontal = 2
margin/left = 0.0
margin/top = 0.0
margin/right = 40.0
margin/bottom = 13.0
text = "This demo shows how to use a regular Area2D to get input events, and how to convert the input events to local coordinates of the node.\nUnlike controls, Input on Area2D or PhysicsBody2D nodes only works properly (with scrolling) on canvas layer 0."
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 B

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 907 B

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c33jd3nwdqtb4"
path="res://.godot/imported/face_happy.png-38d387d31ec13459f749c93ce3d75d80.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://face_happy.png"
dest_files=["res://.godot/imported/face_happy.png-38d387d31ec13459f749c93ce3d75d80.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 846 B

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b63ok8dbyysfs"
path="res://.godot/imported/face_sad.png-0ac7165eab24f595aba17a746a66c550.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://face_sad.png"
dest_files=["res://.godot/imported/face_sad.png-0ac7165eab24f595aba17a746a66c550.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

View File

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

View File

@@ -1,37 +0,0 @@
extends Node2D
# This demo is an example of controlling 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
@onready var sprite: AnimatedSprite2D = $AnimatedSprite2D
func _ready() -> void:
# The player follows the mouse cursor automatically, so there's no point
# in displaying the mouse cursor.
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
func _input(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)
func _on_body_shape_entered(_body_id: RID, _body: Node2D, _body_shape_index: int, _local_shape_index: int) -> void:
# Player got touched by a bullet so sprite changes to sad face.
touching += 1
if touching >= 1:
sprite.frame = 1
func _on_body_shape_exited(_body_id: RID, _body: Node2D, _body_shape_index: int, _local_shape_index: int) -> void:
touching -= 1
# When non of the bullets are touching the player,
# sprite changes to happy face.
if touching == 0:
sprite.frame = 0

View File

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

View File

@@ -1,36 +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="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/icon="res://icon.webp"
[debug]
gdscript/warnings/untyped_declaration=1
[display]
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[layer_names]
2d_physics/layer_1="Player"
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 KiB

View File

@@ -1,40 +0,0 @@
[gd_scene load_steps=7 format=3 uid="uid://dxq1b4cth265d"]
[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"]
[sub_resource type="SpriteFrames" id="1"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3")
}, {
"duration": 1.0,
"texture": ExtResource("4")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="2"]
radius = 27.0
[node name="Shower" type="Node2D"]
[node name="Bullets" type="Node2D" parent="."]
script = ExtResource("2")
[node name="Player" type="Area2D" parent="."]
script = ExtResource("5")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Player"]
sprite_frames = SubResource("1")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Player"]
shape = SubResource("2")
[connection signal="body_shape_entered" from="Player" to="Player" method="_on_body_shape_entered"]
[connection signal="body_shape_exited" from="Player" to="Player" method="_on_body_shape_exited"]

View File

@@ -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

@@ -1,2 +0,0 @@
.import
logs/

View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2017 KidsCanCode
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,33 +0,0 @@
# Dodge the Creeps
This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the
["Your first 2D game"](https://docs.godotengine.org/en/latest/getting_started/first_2d_game/index.html)
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
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).
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/2712
## Screenshots
![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif)
![Screenshot](screenshots/dodge.png)
## Copying
`art/House In a Forest Loop.ogg` Copyright &copy; 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](https://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
Font is "Xolonium". Copyright &copy; 2011-2016 Severin Meyer <sev.ch@web.de>, with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in `fonts/LICENSE.txt`.

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dun74wipekpfq"
path="res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6332e9489.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemyFlyingAlt_1.png"
dest_files=["res://.godot/imported/enemyFlyingAlt_1.png-559f599b16c69b112c1b53f6332e9489.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://vusf51hepduk"
path="res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3cd932c076.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemyFlyingAlt_2.png"
dest_files=["res://.godot/imported/enemyFlyingAlt_2.png-31dc7310eda6e1b721224f3cd932c076.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d182mv7y80xqy"
path="res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e98a3d80.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemySwimming_1.png"
dest_files=["res://.godot/imported/enemySwimming_1.png-dd0e11759dc3d624c8a704f6e98a3d80.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dmgglhdyowipd"
path="res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340bd4a0a62.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemySwimming_2.png"
dest_files=["res://.godot/imported/enemySwimming_2.png-4c0cbc0732264c4ea3290340bd4a0a62.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dgwhuvn7qb4iy"
path="res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc1e6471.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemyWalking_1.png"
dest_files=["res://.godot/imported/enemyWalking_1.png-5af6eedbe61b701677d490ffdc1e6471.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dyw702efe6meu"
path="res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb0436246b935.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/enemyWalking_2.png"
dest_files=["res://.godot/imported/enemyWalking_2.png-67c480ed60c35e95f5acb0436246b935.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

Binary file not shown.

View File

@@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://td2mgko63p61"
path="res://.godot/imported/gameover.wav-98c95c744b35280048c2bd093cf8a356.sample"
[deps]
source_file="res://art/gameover.wav"
dest_files=["res://.godot/imported/gameover.wav-98c95c744b35280048c2bd093cf8a356.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=true
edit/normalize=true
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bcow5c46vixno"
path="res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314d44564.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/playerGrey_up1.png"
dest_files=["res://.godot/imported/playerGrey_up1.png-6bd114d0a6beac91f48e3a7314d44564.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dw3lwgwhpbfx8"
path="res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa7552ee79.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/playerGrey_up2.png"
dest_files=["res://.godot/imported/playerGrey_up2.png-d6aba85f5f2675ebc7045efa7552ee79.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b2aofu01vxvea"
path="res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4458c2742.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/playerGrey_walk1.png"
dest_files=["res://.godot/imported/playerGrey_walk1.png-c4773fe7a7bf85d7ab732eb4458c2742.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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddjou2q6gxlfr"
path="res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c51884043.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://art/playerGrey_walk2.png"
dest_files=["res://.godot/imported/playerGrey_walk2.png-34d2d916366100182d08037c51884043.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -1,253 +0,0 @@
Please distribute this file along with the Xolonium fonts when possible.
Source
Find the sourcefiles of Xolonium at
<gitlab.com/sev/xolonium>
Credits
Xolonium is created with FontForge <fontforge.org>,
Inkscape <inkscape.org>, Python <python.org>, and
FontTools <github.com/fonttools>.
It originated as a custom font for the open-source
game Xonotic <xonotic.org>. With many thanks to the
Xonotic community for your support.
Supported OpenType features
case Provides case sensitive placement of punctuation,
brackets, and math symbols for uppercase text.
frac Replaces number/number sequences with diagonal fractions.
Numbers that touch a slash should not exceed 10 digits.
kern Provides kerning for Latin, Greek, and Cyrillic scripts.
locl Dutch: Replaces j with a stressed version if it follows í.
Sami: Replaces n-form Eng with the preferred N-form version.
Romanian and Moldovan: Replaces ŞşŢţ with the preferred ȘșȚț.
pnum Replaces monospaced digits with proportional versions.
sinf Replaces digits with scientific inferiors below the baseline.
subs Replaces digits with subscript versions on the baseline.
sups Replaces digits with superscript versions.
zero Replaces zero with a slashed version.
Supported glyph sets
Adobe Latin 3
OpenType W1G
ISO 8859-1 Western European
ISO 8859-2 Central European
ISO 8859-3 South European
ISO 8859-4 North European
ISO 8859-5 Cyrillic
ISO 8859-7 Greek
ISO 8859-9 Turkish
ISO 8859-10 Nordic
ISO 8859-13 Baltic Rim
ISO 8859-14 Celtic
ISO 8859-15 Western European
ISO 8859-16 South-Eastern European
Available glyphs
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
 ¡¢£¤¥¦§¨©ª«¬ ®¯°±²³´µ¶·¸¹º»¼½¾¿
ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß
àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ
ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľ
ĿŀŁłŃńŅņŇňŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş
ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽž
ƒǺǻǼǽǾǿȘșȚțȷ
ˆˇˉ˘˙˚˛˜˝
ͺ;΄΅Ά·ΈΉΊΌΎΏΐ
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰ
αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП
РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп
рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ
ѢѣѲѳѴѵҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩ
ҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽӀӁӂӇӈӋӌӏӐӑӒӓ
ӔӕӖӗӘәӜӝӞӟӠӡӢӣӤӥӦӧӨөӮӯӰӱӲӳӴӵӶӷӸӹ
Ԥԥ
ḂḃḊḋḞḟṀṁṖṗṠṡṪṫẀẁẂẃẄẅẞỲỳ
     ‒–—―‘’‚‛“”„‟†‡•…‰′″‹›‽‾⁄
⁰⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎
₤₦₩₫€₯₱₹₺₽₿
℅ℓ№℗™Ω℮
⅛⅜⅝⅞
←↑→↓
∂∆∏∑−∕∙√∞∟∫≈≠≤≥
■▬▮▰▲▶▼◀◆◊●◢◣◤◥
☄★☠☢☣⚙⚛⚠⚡⛔
❇❈❌❤❰❱❲❳
fffiflffiffl
🌌🌍🌎🌏👽💣🔥🔫
😁😃😄😆😇😈😉😊😎😐😒😕😘
😛😝😞😟😠😣😭😮😲😴😵
🚀
Debugging glyphs
 U+EFFD Font version
 U+F000 Font hinting indicator
Changelog
Xolonium 4.1 2016-11-22 Severin Meyer <sev.ch@web.de>
Reverted frac OpenType feature to a more stable implementation
Xolonium 4.0 2016-10-08 Severin Meyer <sev.ch@web.de>
Decreased width of most glyphs
Thinner vertical stems in Xolonium-Regular
Thicker horizontal stems in Xolonium-Bold
Revised diagonal stems
Lowered middle bars
Revised diacritical bars
Added glyphs:
ӏẞ₿
U+2007 U+2008 U+2009 U+200A U+202F
U+EFFD U+F000
Revised glyphs:
$&,JKQRXkwxy~¢¤ßǻ˜ζκλμξφЖУжћѴѵ∕₱₺₦₩€ℓ№≈ffffiffl
❤🌍🌎🌏😁😄😇😈😉😊😘😭😮😴🚀
Removed uncommon glyphs:
ʼnſʼҌҍҎҏҾҿӃӄӇӈӚӛӪӫӬӭ
U+0312 U+0313 U+0326
Simplified OpenType features pnum, zero, and case
Removed OpenType feature dlig
Revised vertical metrics
Merged outlines of composite glyphs in otf version
Added ttf version with custom outlines and instructions
Added woff and woff2 version
Xolonium 3.1 2015-06-10 Severin Meyer <sev.ch@web.de>
Added currency glyphs:
₦₩₫₱₹₺₽
Revised glyph:
Relicensed public release under the SIL Open Font License 1.1
Xolonium 3.0 2015-05-04 Severin Meyer <sev.ch@web.de>
Decreased width of glyphs
Decreased descender height
Increased height of super/subscript glyphs
Revised width of dashes, underscore, and overscore
Sharper bends with more circular proportions
Decreased stroke thickness of mathematical glyphs
Revised diacritical marks
Revised diacritical bars
Revised Cyrillic hooks
Revised glyphs:
GQRYjmuwßŊŒſƒǻfffiffiffl
ΞΨΩδζιξπςστυφω
ЉЄДЛУЭЯбдлэяєљђєћѢѣҨҩҼҽӃӄӘә
#$&'()*,/69?@[]{}~¡£¤¥§©®¿
‹›₤€₯ℓ№℗℮←↑→↓∂∏∑∞≈▰☄❈❰❱❲❳😝
Raised vertical position of mathematical glyphs
Unified advance width of numeral and monetary glyphs
Unified advance width of mathematical glyphs
Revised bearings
Rewrote kern feature
Bolder Xolonium-Bold with improved proportions
Updated glyph names to conform to the AGLFN 1.7
Revised hints and PS Private Dictionary
Added glyphs:
ӶӷԤԥ
Added OpenType features:
case frac liga locl pnum sinf subs sups zero
Xolonium 2.4 2014-12-23 Severin Meyer <sev.ch@web.de>
Added dingbats:
⛔💣🔥
Revised size and design of emoticons
Revised dingbats:
⌖☄☠☣⚙⚛⚠⚡❇❈🌌🌍🌎🌏🔫
Removed dingbat:
💥
Xolonium 2.3 2014-08-14 Severin Meyer <sev.ch@web.de>
Bugfixed ε and έ, thanks to bowzee for the feedback
Xolonium 2.2 2014-03-01 Severin Meyer <sev.ch@web.de>
Added dingbats:
⌖◆●❌💥
Revised dingbats:
•←↑→↓◊☄★☠☣⚙⚛⚠⚡❇❈❤🌌🌍🌎🌏👽🔫🚀
Removed dingbats:
♻✪💡📡🔋🔧🔭
Xolonium 2.1 2013-10-20 Severin Meyer <sev.ch@web.de>
Added dingbats:
←↑→↓❰❱❲❳■▬▮▰▲▶▼◀◢◣◤◥
☄★☠☢☣♻⚙⚛⚠⚡✪❇❈❤
🌌🌍🌎🌏👽💡📡🔋🔧🔫🔭🚀
😁😃😄😆😇😈😉😊😎😐😒😕
😘😛😝😞😟😠😣😭😮😲😴😵
Xolonium 2.0.1 2013-07-12 Severin Meyer <sev.ch@web.de>
Reorganised and simplified files
Xolonium 2.0 2012-08-11 Severin Meyer <sev.ch@web.de>
Revised bends
Revised thickness of uppercase diagonal stems
Revised diacritical marks
Revised hints and PS Private Dictionary
Revised glyphs:
*1469@DPRly{}§©®¶ÐÞƒΘΞαεζνξνυЄЉЊ
ЏБЗЛУЧЪЫЬЭЯбзлчъыьэяєљњџ•€∂∙√∞∫≠
Completed glyph sets:
Adobe Latin 3
OpenType World Glyph Set 1 (W1G)
Ghostscript Standard (ghostscript-fonts-std-8.11)
Added OpenType kern feature
Added Xolonium-Bold
Xolonium 1.2 2011-02-12 Severin Meyer <sev.ch@web.de>
Revised glyphs:
D·Ðı
Completed glyph sets:
ISO 8859-7 (Greek)
Unicode Latin Extended-A block
Added glyphs:
†‡•…‰⁄™∂∑−√∞≠≤≥
Xolonium 1.1 2011-01-17 Severin Meyer <sev.ch@web.de>
Revised placement of cedilla and ogonek in accented glyphs
Revised glyphs:
,;DKTjkvwxy¥§Ð˛
Completed glyph sets:
ISO 8859-2 (Central European)
ISO 8859-3 (South European, Esperanto)
ISO 8859-4 (North European)
ISO 8859-5 (Cyrillic)
ISO 8859-9 (Turkish)
ISO 8859-10 (Nordic)
ISO 8859-13 (Baltic Rim)
ISO 8859-14 (Celtic)
ISO 8859-16 (South-Eastern European)
Added glyphs:
ȷʼ̒ ЀЍѐѝ‒–—‘’‚‛“”„‟‹›
Xolonium 1.0 2011-01-04 Severin Meyer <sev.ch@web.de>
Completed glyph sets:
ISO 8859-1 (Western European)
ISO 8859-15 (Western European)
Added glyphs:
ĄĆĘŁŃŚŹŻąćęłńśźżıˆˇ˙˚˛˜

View File

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

View File

@@ -1,36 +0,0 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://bgv586r20ps8e"
path="res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e2bb73fba.fontdata"
[deps]
source_file="res://fonts/Xolonium-Regular.ttf"
dest_files=["res://.godot/imported/Xolonium-Regular.ttf-bc2981e3069cff4c34dd7c8e2bb73fba.fontdata"]
[params]
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
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[]
language_support={}
script_support={}
opentype_features={}

View File

@@ -1,30 +0,0 @@
extends CanvasLayer
signal start_game
func show_message(text):
$MessageLabel.text = text
$MessageLabel.show()
$MessageTimer.start()
func show_game_over():
show_message("Game Over")
await $MessageTimer.timeout
$MessageLabel.text = "Dodge the\nCreeps"
$MessageLabel.show()
await get_tree().create_timer(1).timeout
$StartButton.show()
func update_score(score):
$ScoreLabel.text = str(score)
func _on_StartButton_pressed():
$StartButton.hide()
start_game.emit()
func _on_MessageTimer_timeout():
$MessageLabel.hide()

View File

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

View File

@@ -1,61 +0,0 @@
[gd_scene load_steps=5 format=3 uid="uid://b0efehuavobda"]
[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"]
[sub_resource type="InputEventAction" id="InputEventAction_fopy7"]
action = &"start_game"
[sub_resource type="Shortcut" id="4"]
events = [SubResource("InputEventAction_fopy7")]
[node name="HUD" type="CanvasLayer"]
script = ExtResource("1")
[node name="ScoreLabel" type="Label" parent="."]
anchors_preset = 10
anchor_right = 1.0
offset_bottom = 78.0
grow_horizontal = 2
theme_override_fonts/font = ExtResource("2_2jm3i")
theme_override_font_sizes/font_size = 60
text = "0"
horizontal_alignment = 1
[node name="MessageLabel" type="Label" parent="."]
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_top = -79.5
offset_bottom = 79.5
grow_horizontal = 2
grow_vertical = 2
theme_override_fonts/font = ExtResource("2_2jm3i")
theme_override_font_sizes/font_size = 60
text = "Dodge the
Creeps"
horizontal_alignment = 1
[node name="StartButton" type="Button" parent="."]
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -90.0
offset_top = -200.0
offset_right = 90.0
offset_bottom = -100.0
grow_horizontal = 2
grow_vertical = 0
theme_override_fonts/font = ExtResource("2_2jm3i")
theme_override_font_sizes/font_size = 60
shortcut = SubResource("4")
text = "Start"
[node name="MessageTimer" type="Timer" parent="."]
one_shot = true
[connection signal="pressed" from="StartButton" to="." method="_on_StartButton_pressed"]
[connection signal="timeout" from="MessageTimer" to="." method="_on_MessageTimer_timeout"]

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