Merge pull request #432 from aaronfranke/readme

Add README files to many demos
This commit is contained in:
Aaron Franke
2020-03-09 10:21:53 -04:00
committed by GitHub
196 changed files with 1045 additions and 64 deletions

View File

@@ -0,0 +1,19 @@
# Dodge the Creeps
This is a simple game where your character must move
and avoid the enemies for as long as possible.
This is a finished version of the game featured in the
["Your first game"](https://docs.godotengine.org/en/latest/getting_started/step_by_step/your_first_game.html)
tutorial in the documentation. For more details,
consider following the tutorial in the documentation.
Language: GDScript
Renderer: GLES 3 (particles are not available in GLES 2)
Note: There is a C# version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/mono/dodge_the_creeps).
## Screenshots
![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif)

View File

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

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Hierarchical Finite State Machine example"
config/name="Hierarchical Finite State Machine"
run/main_scene="res://Demo.tscn"
config/icon="res://icon.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

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

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

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

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

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

View File

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

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB

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

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

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,11 @@
# 2D Lights as Mask
Example of how to use 2D lights to mask objects on screen.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/mask.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Using Lights as Mask"
config/name="2D Lights as Mask"
run/main_scene="res://lightmask.tscn"
config/icon="res://icon.png"

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

View File

@@ -0,0 +1,13 @@
# 2D Lights and Shadows
Simple demo of 2D lights and shadows, using
[`Light2D`](https://docs.godotengine.org/en/latest/classes/class_light2d.html)
and [`LightOccluder2D`](https://docs.godotengine.org/en/latest/classes/class_lightoccluder2d.html).
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/lights.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="2D Lighting"
config/name="2D Lights and Shadows"
run/main_scene="res://light_shadows.tscn"
config/icon="res://icon.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

15
2d/navigation/README.md Normal file
View File

@@ -0,0 +1,15 @@
# Navigation Polygon 2D
Example of using 2D navigation using a
[`NavigationPolygon`](https://docs.godotengine.org/en/latest/classes/class_navigationpolygon.html)
in a [`NavigationPolygonInstance`](https://docs.godotengine.org/en/latest/classes/class_navigationpolygoninstance.html) node.
It uses the 2D navigation API to request a path between two points,
and then traverses the resulting path.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/navigation.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Navigation Polygon (2D)"
config/name="Navigation Polygon 2D"
run/main_scene="res://level.tscn"
config/icon="res://icon.png"

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

View File

@@ -0,0 +1,12 @@
# Grid-based Navigation with Astar
This is an example of using AStar for navigation in 2D,
complete with Steering Behaviors in order to smooth the movement out.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/nav_astar.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Grid-based pathfinding with Astar"
config/name="Grid-based Pathfinding with Astar"
run/main_scene="res://Game.tscn"
config/icon="res://icon.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

18
2d/particles/README.md Normal file
View File

@@ -0,0 +1,18 @@
# 2D Particles
This demo showcases how 2D particle systems work in Godot.
Language: GDScript
Renderer: GLES 3 (particles are not available in GLES 2)
## How does it work?
It uses [`Particles2D`](https://docs.godotengine.org/en/latest/classes/class_particles2d.html) nodes
with [`ParticlesMaterial`](https://docs.godotengine.org/en/latest/classes/class_particlesmaterial.html)
materials. Note that `ParticlesMaterial` is agnostic between 2D and 3D,
so when used in 2D, the "Disable Z" flag should be enabled.
## Screenshots
![Screenshot of particles](screenshots/particles.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Particle Systems"
config/name="2D Particles"
run/main_scene="res://particles.tscn"
config/icon="res://icon.png"

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

View File

@@ -0,0 +1,28 @@
# Physics Platformer
This demo uses [`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html)
for the player and enemies.
These character controllers are more powerful than
[`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html),
but can be more difficult to handle, as they require
manual modification of the RigidBody velocity.
Language: GDScript
Renderer: GLES 3 (particles are not available in GLES 2)
## How does it work?
The player and enemies use dynamic character
controllers for movement, made with
[`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html),
which means that they can perfectly interact with physics
(there is a see-saw, and you can even ride enemies).
Because of this, all movement must be done in sync with
the physics engine, inside of `_integrate_forces()`.
## Screenshots
![Screenshot of the beginning](screenshots/beginning.png)
![Screenshot of the seesaw and the player riding an enemy](screenshots/seesaw-riding.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -8,9 +8,13 @@ You will find most of the demos content in the `Level.tscn` scene. You can op
We invite you to open the demo's GDScript files in the editor as they contain a lot of comments that explain how each class works.
Language: GDScript
Renderer: GLES 3 (particles are not available in GLES 2)
## Features
- Side-scrolling player controller.
- Side-scrolling player controller using [`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html).
- Can walk on and snap to slopes.
- Can shoot, including while jumping.
- Enemies that crawl on the floor and change direction when they encounter an obstacle.
@@ -26,4 +30,5 @@ We invite you to open the demo's GDScript files in the editor as they contain a
## Screenshots
![Player shooting in the direction of an enemy](screenshots/shoot.png)
![The entire level layout viewed in the editor](screenshots/layout.png)

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

@@ -0,0 +1,24 @@
# Pong with GDScript
A simple Pong game. This demo shows best practices
for game development in Godot, including
[signals](https://docs.godotengine.org/en/latest/getting_started/step_by_step/signals.html).
Language: GDScript
Renderer: GLES 2
Note: There is a C# version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/mono/pong).
Note: There is a VisualScript version available [here](https://github.com/godotengine/godot-demo-projects/tree/master/visual_script/pong).
## How does it work?
The walls, paddle, and ball are all
[`Area2D`](https://docs.godotengine.org/en/latest/classes/class_area2d.html)
nodes. When the ball touches the walls or the paddles,
they emit signals and modify the ball.
## Screenshots
![Screenshot](screenshots/pong.png)

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -2,6 +2,6 @@ extends Area2D
export var _bounce_direction = 1
func _on_area_entered( area ):
func _on_area_entered(area):
if area.name == "Ball":
area.direction = (area.direction + Vector2(0, _bounce_direction)).normalized()

View File

@@ -0,0 +1,15 @@
# Role Playing Game
This shows a method of creating grid-based movement with Godot
and GDScript. It also includes a simple JRPG-style dialogue and
battle system on top of it.
Language: GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/object.png)
![Screenshot](screenshots/battle.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,14 @@
# Screen Space Shaders
Several examples of full screen 2D shader processing.
Many common full-res effects are implemented here for reference.
Language: [GDSL](https://docs.godotengine.org/en/latest/tutorials/shading/shading_reference/shading_language.html) and GDScript
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/whirl.png)
![Screenshot](screenshots/old_film.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Screen-Space Shaders"
config/name="Screen Space Shaders"
run/main_scene="res://screen_shaders.tscn"
config/icon="res://icon.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 863 KiB

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

@@ -0,0 +1,13 @@
# SDF Font
This is a demo of Signed Distance Field fonts in Godot.
The technique used allows the text to remain clear
under arbitrary zooms and rotations.
Language: GDScript
Renderer: GLES 3 (this effect is not available in GLES 2)
## Screenshots
![Screenshot](screenshots/sdf.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,12 @@
# Sprite Shaders
This is a sample consisting of different shaders applied to some sprites.
Effects include outlines, blurs, distorts, shadows, glows, and more.
Language: [GDSL](https://docs.godotengine.org/en/latest/tutorials/shading/shading_reference/shading_language.html)
Renderer: GLES 2
## Screenshots
![Screenshot](screenshots/sprite.png)

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

22
3d/ik/README.md Normal file
View File

@@ -0,0 +1,22 @@
# 3D Inverse Kinematics
This is an example of different Inverse Kinematic algorithms
implemented in Godot. It contains four scenes, showing
different ways they can be used.
Language: GDScript
Renderer: GLES 3
## How does it work?
This demo shows how to implement IK using two different methods. One uses the
[`SkeletonIK`](https://docs.godotengine.org/en/latest/classes/class_skeletonik.html)
node which is built into Godot. The other method is using a script
called FABRIK (inside of the SADE plugin) for inverse kinematics.
## Screenshots
![Screenshot](screenshots/cube.png)
![Screenshot](screenshots/fps_gun.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="3D IK"
config/name="3D Inverse Kinematics"
run/main_scene="res://look_at_ik.tscn"
config/icon="res://icon.png"

View File

BIN
3d/ik/screenshots/cube.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

View File

@@ -0,0 +1,21 @@
# 3D Kinematic Character
Kinematic character demo for 3D using a cube for the character.
This is similar to the 2D platformer demo.
Language: GDScript
Renderer: GLES 3
## How does it work?
This demo uses a [`KinematicBody`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody.html)
for the player, and [`StaticBody`](https://docs.godotengine.org/en/latest/classes/class_staticbody.html)
for the level. Each has colliders, the player moves itself via
`move_and_slide()` in `_physics_process()`, and collides with the level.
## Screenshots
![Screenshot](screenshots/ingame.png)
![Screenshot](screenshots/editor.png)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

View File

@@ -0,0 +1,17 @@
# Material Testers
This demo includes many sphere-like objects with complex materials,
for the purpose of showcasing Godot's rendering capabilities.
This demo was featured at the beginning of the
[Godot 3.0 trailer](https://www.youtube.com/watch?v=XptlVErsL-o).
Language: GDScript
Renderer: GLES 3
## Screenshots
![Screenshot](screenshots/stones.png)
![Screenshot](screenshots/mirror.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Material Tester"
config/name="Material Testers"
run/main_scene="res://material_tester.tscn"
config/icon="res://icon.png"
@@ -36,4 +36,3 @@ multithread/thread_rid_pool_prealloc=60
vram_compression/import_etc2=false
quality/filters/msaa=2
environment/default_environment="res://default_env.tres"

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 KiB

14
3d/navmesh/README.md Normal file
View File

@@ -0,0 +1,14 @@
# 3D Navigation Mesh
Navigation mesh demo for 3D scenes, with a character
able to pathfind around a complex 3D environment.
The navigation path is drawn using a line.
Code is provided for polyline following in 3D.
Language: GDScript
Renderer: GLES 3
## Screenshots
![Screenshot](screenshots/nav.png)

View File

@@ -15,7 +15,7 @@ _global_script_class_icons={
[application]
config/name="Navmesh Demo"
config/name="3D Navigation Mesh"
run/main_scene="res://navmesh.tscn"
config/icon="res://icon.png"

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

16
3d/platformer/README.md Normal file
View File

@@ -0,0 +1,16 @@
# 3D Platformer
3D Platformer demo using a
[`KinematicBody`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody.html).
It uses similar code to the 2D platformer, but implemented in 3D.
It also features audio reverberation (it sounds echo-y).
Language: GDScript
Renderer: GLES 3
## Screenshots
![Screenshot](screenshots/face.png)
![Screenshot](screenshots/shoot.png)

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 623 KiB

27
3d/truck_town/README.md Normal file
View File

@@ -0,0 +1,27 @@
# Truck Town
This is a demo implementing different types of trucks of
varying complexity using vehicle physics.
Do not be surprised if everything is bouncy and glitchy,
Godot's physics system is not polished and will likely be
reworked in the future.
Language: GDScript
Renderer: GLES 2
## How does it work?
The base vehicle uses a
[`VehicleBody`](https://docs.godotengine.org/en/latest/classes/class_vehiclebody.html)
node. The trailer truck is tied together using a
[`ConeJointTwist`](https://docs.godotengine.org/en/latest/classes/class_conetwistjoint.html)
node, and the tow truck is tried together using a chain made of
[`RigidBody`](https://docs.godotengine.org/en/latest/classes/class_rigidbody.html)
nodes which are pinned together using
[`PinJoint`](https://docs.godotengine.org/en/latest/classes/class_pinjoint.html) nodes.
## Screenshots
![Screenshot](screenshots/tow.png)

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

18
audio/bpm_sync/README.md Normal file
View File

@@ -0,0 +1,18 @@
# Audio BPM Sync
A demo of how to sync the audio playback with the time for a consistent BPM.
Language: GDScript
Renderer: GLES 2
## How does it work?
For the sound clock, it uses methods in
[`AudioServer`](https://docs.godotengine.org/en/latest/classes/class_audioserver.html)
to sync the audio playback.
For the system clock, it uses `OS.get_ticks_usec()`.
## Screenshots
![Screenshot](screenshots/bpm.png)

View File

@@ -7,10 +7,12 @@ var playing = false
const COMPENSATE_FRAMES = 2
const COMPENSATE_HZ = 60.0
const SYNC_SOURCE_SYSTEM_CLOCK = 0
const SYNC_SOURCE_SOUND_CLOCK = 1
enum SyncSource {
SYSTEM_CLOCK,
SOUND_CLOCK,
}
var sync_source = SYNC_SOURCE_SYSTEM_CLOCK
var sync_source = SyncSource.SYSTEM_CLOCK
# Used by system clock.
var time_begin
@@ -25,16 +27,16 @@ func strsec(secs):
func _process(_delta):
if (!playing or !$Player.playing):
if !playing or !$Player.playing:
return
var time = 0.0
if (sync_source == SYNC_SOURCE_SYSTEM_CLOCK):
if sync_source == SyncSource.SYSTEM_CLOCK:
# Obtain from ticks.
time = (OS.get_ticks_usec() - time_begin) / 1000000.0
# Compensate.
time -= time_delay
elif (sync_source == SYNC_SOURCE_SOUND_CLOCK):
elif sync_source == SyncSource.SOUND_CLOCK:
time = $Player.get_playback_position() + AudioServer.get_time_since_last_mix() - AudioServer.get_output_latency() + (1 / COMPENSATE_HZ) * COMPENSATE_FRAMES
var beat = int(time * BPM / 60.0)
@@ -44,7 +46,7 @@ func _process(_delta):
func _on_PlaySystem_pressed():
sync_source = SYNC_SOURCE_SYSTEM_CLOCK
sync_source = SyncSource.SYSTEM_CLOCK
time_begin = OS.get_ticks_usec()
time_delay = AudioServer.get_time_to_next_mix() + AudioServer.get_output_latency()
playing = true
@@ -52,6 +54,6 @@ func _on_PlaySystem_pressed():
func _on_PlaySound_pressed():
sync_source = SYNC_SOURCE_SOUND_CLOCK
sync_source = SyncSource.SOUND_CLOCK
playing = true
$Player.play()

BIN
audio/bpm_sync/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 921 B

View File

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

View File

@@ -17,6 +17,7 @@ _global_script_class_icons={
config/name="BPM Sync Demo"
run/main_scene="res://bpm_sync.tscn"
config/icon="res://icon.png"
[rendering]

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,36 +1,37 @@
extends Control
onready var itemList = get_node("ItemList")
onready var item_list = get_node("ItemList")
func _ready():
for item in AudioServer.get_device_list():
itemList.add_item(item)
item_list.add_item(item)
var device = AudioServer.get_device()
for i in range(itemList.get_item_count()):
if device == itemList.get_item_text(i):
itemList.select(i)
for i in range(item_list.get_item_count()):
if device == item_list.get_item_text(i):
item_list.select(i)
break
func _process(_delta):
var speakerMode = "Stereo"
var speaker_mode_text = "Stereo"
var speaker_mode = AudioServer.get_speaker_mode()
if AudioServer.get_speaker_mode() == AudioServer.SPEAKER_SURROUND_31:
speakerMode = "Surround 3.1"
elif AudioServer.get_speaker_mode() == AudioServer.SPEAKER_SURROUND_51:
speakerMode = "Surround 5.1"
elif AudioServer.get_speaker_mode() == AudioServer.SPEAKER_SURROUND_71:
speakerMode = "Surround 7.1"
if speaker_mode == AudioServer.SPEAKER_SURROUND_31:
speaker_mode_text = "Surround 3.1"
elif speaker_mode == AudioServer.SPEAKER_SURROUND_51:
speaker_mode_text = "Surround 5.1"
elif speaker_mode == AudioServer.SPEAKER_SURROUND_71:
speaker_mode_text = "Surround 7.1"
$DeviceInfo.text = "Current Device: " + AudioServer.get_device() + "\n"
$DeviceInfo.text += "Speaker Mode: " + speakerMode
$DeviceInfo.text += "Speaker Mode: " + speaker_mode_text
func _on_Button_button_down():
for item in itemList.get_selected_items():
var device = itemList.get_item_text(item)
for item in item_list.get_selected_items():
var device = item_list.get_item_text(item)
AudioServer.set_device(device)

View File

@@ -0,0 +1,18 @@
# Audio Device Changer
This is a demo showing how the audio output device can be changed from Godot.
Language: GDScript
Renderer: GLES 2
## How does it work?
It uses the `set_device()` method in
[`AudioServer`](https://docs.godotengine.org/en/latest/classes/class_audioserver.html)
to change the audio device.
The list of devices is populated using `get_device_list()`.
## Screenshots
![Screenshot](screenshots/device_changer.png)

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