Compare commits

..

7 Commits

Author SHA1 Message Date
Aaron Franke
ea5b868fc7 [3.1] Simplify list of branches in the README (#1255) 2025-10-02 16:51:20 -07:00
Rémi Verschelde
a6ae6f64be Update README for new branches, matches Godot upstream
(cherry picked from commit c0180d20d1)
2023-02-28 18:37:03 +01:00
Aaron Franke
507b8c6cf6 [3.1] Update README for the new 3.3 branch 2021-11-05 10:16:20 -05:00
Aaron Franke
e59d96ef7a Merge pull request #610 from aaronfranke/3.1-readme-license-3.2
[3.1] Update README for the new 3.2 branch
2021-04-21 03:51:30 -05:00
Aaron Franke
19584aae6a [3.1] Update README for the new 3.2 branch 2021-04-04 01:16:45 -04:00
Aaron Franke
342f27e327 Merge pull request #407 from aaronfranke/3.1
Remove BPM Sync demo from the 3.1 branch
2020-02-10 19:21:38 -05:00
Aaron Franke
4d10544dd9 Remove BPM Sync demo from the 3.1 branch 2020-02-10 19:13:49 -05:00
1421 changed files with 8745 additions and 23856 deletions

View File

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

2
.gitattributes vendored
View File

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

6
.github/CODEOWNERS vendored
View File

@@ -1,6 +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
/misc/2.5d @aaronfranke
/mono/2.5d @aaronfranke

2
.github/FUNDING.yml vendored Normal file
View File

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

18
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

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

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

View File

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

View File

@@ -4,10 +4,10 @@ on: [push, pull_request]
jobs:
format:
name: File formatting (file_format.sh)
runs-on: ubuntu-20.04
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v5
- name: Install dependencies
run: |

3
.gitignore vendored
View File

@@ -5,6 +5,8 @@
.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
@@ -16,4 +18,5 @@ mono_crash.*.json
# System/tool-specific ignores
.directory
.DS_Store
*~

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
[GDSL](https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/shading_language.html)
Renderers: 6 of them are GLES 3, but most are GLES 2

View File

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

View File

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

View File

@@ -14,7 +14,7 @@ _data = {
[node name="Main" type="Node"]
script = ExtResource( 1 )
mob_scene = ExtResource( 2 )
Mob = ExtResource( 2 )
[node name="ColorRect" type="ColorRect" parent="."]
anchor_right = 1.0

View File

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

View File

@@ -10,6 +10,11 @@
[sub_resource type="SpriteFrames" id=1]
animations = [ {
"frames": [ ExtResource( 2 ), ExtResource( 3 ) ],
"loop": true,
"name": "fly",
"speed": 3.0
}, {
"frames": [ ExtResource( 4 ), ExtResource( 5 ) ],
"loop": true,
"name": "walk",
@@ -19,20 +24,13 @@ animations = [ {
"loop": true,
"name": "swim",
"speed": 4.0
}, {
"frames": [ ExtResource( 2 ), ExtResource( 3 ) ],
"loop": true,
"name": "fly",
"speed": 3.0
} ]
[sub_resource type="CapsuleShape2D" id=2]
radius = 35.2706
height = 23.3281
[node name="Mob" type="RigidBody2D" groups=[
"mobs",
]]
[node name="Mob" type="RigidBody2D"]
collision_mask = 0
gravity_scale = 0.0
script = ExtResource( 1 )
@@ -44,6 +42,8 @@ __meta__ = {
scale = Vector2( 0.75, 0.75 )
frames = SubResource( 1 )
animation = "walk"
frame = 1
playing = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
rotation = 1.5708

View File

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

View File

@@ -1,29 +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 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).
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/515
## Screenshots
![GIF from the documentation](https://docs.godotengine.org/en/latest/_images/dodge_preview.gif)
## Copying
`art/House In a Forest Loop.ogg` Copyright &copy; 2012 [HorrorPen](https://opengameart.org/users/horrorpen), [CC-BY 3.0: Attribution](http://creativecommons.org/licenses/by/3.0/). Source: https://opengameart.org/content/loop-house-in-a-forest
Images are from "Abstract Platformer". Created in 2016 by kenney.nl, [CC0 1.0 Universal](http://creativecommons.org/publicdomain/zero/1.0/). Source: https://www.kenney.nl/assets/abstract-platformer
Font is "Xolonium". Copyright &copy; 2011-2016 Severin Meyer <sev.ch@web.de>, with Reserved Font Name Xolonium, SIL open font license version 1.1. Details are in `fonts/LICENSE.txt`.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex"
path="res://.import/set3_tiles.png-7dd06b1fc0bcfaa06e9dd732f61382a2.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://ball.png"
dest_files=[ "res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" ]
source_file="res://art/set3_tiles.png"
dest_files=[ "res://.import/set3_tiles.png-7dd06b1fc0bcfaa06e9dd732f61382a2.stex" ]
[params]

View File

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

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

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

View File

@@ -1,32 +0,0 @@
# 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
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/516
## Why use a state machine
States are common in games. You can use the pattern to:
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

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 765 B

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -10,15 +10,11 @@ config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Hierarchical Finite State Machine"
config/description="This example shows how to apply the State machine programming
pattern in GDscript, including Hierarchical States, and a
pushdown automaton."
config/name="Hierarchical Finite State Machine example"
run/main_scene="res://Demo.tscn"
config/icon="res://icon.png"
@@ -26,7 +22,6 @@ config/icon="res://icon.png"
window/size/width=1280
window/size/height=720
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="expand"
@@ -101,4 +96,4 @@ attack={
[rendering]
quality/driver/driver_name="GLES2"
environment/default_environment="res://default_env.tres"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

View File

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

View File

@@ -9,15 +9,10 @@ const IMAGE_SIZE = Vector2(930, 720)
# Enums for the various modes and brush shapes that can be applied.
enum BrushModes {
PENCIL,
ERASER,
CIRCLE_SHAPE,
RECTANGLE_SHAPE,
PENCIL, ERASER, CIRCLE_SHAPE, RECTANGLE_SHAPE
}
enum BrushShapes {
RECTANGLE,
CIRCLE,
RECTANGLE, CIRCLE
}
# The top-left position of the canvas.
@@ -237,9 +232,11 @@ func _draw():
draw_circle(brush.brush_pos, brush.brush_shape_circle_radius, brush.brush_color)
func save_picture(path):
# Wait until the frame has finished before getting the texture.
yield(VisualServer, "frame_post_draw")
# Wait a couple frames so the save dialog isn't in the way.
yield (get_tree(), "idle_frame")
yield (get_tree(), "idle_frame")
# Get the viewport image.
var img = get_viewport().get_texture().get_data()

BIN
2d/gd_paint/PaintTools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

View File

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

View File

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

View File

@@ -1,15 +0,0 @@
# 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
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/517
## Screenshots
![Screenshot](screenshots/gdpaint.png)

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

View File

@@ -10,23 +10,18 @@ config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="GD Paint"
config/description="GD Paint is a simple image editor made using Godot and GDScript.
It supports different types of 'brushes': a basic pen/pencil
and eraser, as well as a rectangle and a circle brush."
run/main_scene="res://paint_root.tscn"
run/main_scene="res://Paint_root.tscn"
config/icon="res://icon.png"
[display]
window/size/width=1280
window/size/height=720
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="keep"
@@ -36,4 +31,4 @@ singletons=[ ]
[rendering]
quality/driver/driver_name="GLES2"
environment/default_environment="res://default_env.tres"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 899 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/character.png-98ed16816c5b464731c4fa68fe5b8613.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pawns/sprites/character.png"
dest_files=[ "res://.import/character.png-98ed16816c5b464731c4fa68fe5b8613.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 787 B

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/character_grey.png-a95d64c2e947e85f04dd1c6474e46965.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://pawns/sprites/character_grey.png"
dest_files=[ "res://.import/character_grey.png-a95d64c2e947e85f04dd1c6474e46965.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
path="res://.import/star.png-4f164f82cf41ace82182660f1be8e68d.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
source_file="res://pawns/sprites/star.png"
dest_files=[ "res://.import/star.png-4f164f82cf41ace82182660f1be8e68d.stex" ]
[params]

View File

@@ -10,47 +10,56 @@ config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Pong Multiplayer with C#"
config/description="A multiplayer demo of the classical pong game.
One of the players should press 'host', while the
other should select the address and press 'join'."
run/main_scene="res://lobby.tscn"
config/name="Grid Movement"
run/main_scene="res://Game.tscn"
config/icon="res://icon.png"
[display]
window/size/width=640
window/size/height=400
window/size/width=1280
window/size/height=720
window/stretch/mode="2d"
window/stretch/aspect="expand"
[input]
move_right={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
]
}
move_left={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
]
}
move_down={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null)
]
}
move_up={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null)
]
}
[rendering]
quality/driver/driver_name="GLES2"
quality/2d/use_pixel_snap=true
environment/default_environment="res://default_env.tres"

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/godot.png-5e0da45ed3d6786d5794553e04f58a8c.stex"
path="res://.import/actor.png-6a88af8a7bcb079732153877dfb0db8b.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://godot.png"
dest_files=[ "res://.import/godot.png-5e0da45ed3d6786d5794553e04f58a8c.stex" ]
source_file="res://tilesets/grid/actor.png"
dest_files=[ "res://.import/actor.png-6a88af8a7bcb079732153877dfb0db8b.stex" ]
[params]

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/paddle.png-0e798fb0912613386507c9904d5cc01a.stex"
path="res://.import/object.png-3e89ebfb3424e8759914732b2b0130c1.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://paddle.png"
dest_files=[ "res://.import/paddle.png-0e798fb0912613386507c9904d5cc01a.stex" ]
source_file="res://tilesets/grid/object.png"
dest_files=[ "res://.import/object.png-3e89ebfb3424e8759914732b2b0130c1.stex" ]
[params]

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

View File

@@ -2,15 +2,15 @@
importer="texture"
type="StreamTexture"
path="res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex"
path="res://.import/obstacle.png-9f01dd1d06d7b99515918b65b46bd6c1.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://paint_tools.png"
dest_files=[ "res://.import/paint_tools.png-224b64b7ddb26189a369199f6d686b79.stex" ]
source_file="res://tilesets/grid/obstacle.png"
dest_files=[ "res://.import/obstacle.png-9f01dd1d06d7b99515918b65b46bd6c1.stex" ]
[params]

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

View File

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

View File

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

View File

@@ -1,18 +0,0 @@
# 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)
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/110
## Screenshots
![Screenshot](screenshots/left.png)
![Screenshot](screenshots/right.png)

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 376 KiB

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 KiB

After

Width:  |  Height:  |  Size: 610 KiB

View File

@@ -10,16 +10,11 @@ config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="HDR for 2D"
config/description="Simple demo how to use High Dynamic Range (HDR) in a 2D game,
via the WorldEnvironment node.
Just slide the cave image left and right to observe the HDR effect at work."
run/main_scene="res://beach_cave.tscn"
config/icon="res://icon.png"
run/name=""
@@ -28,7 +23,6 @@ run/name=""
window/size/width=1080
window/size/height=720
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="expand"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

View File

@@ -1,13 +0,0 @@
# Hexagonal Game
Very simple demo showing a hexagonal TileMap and TileSet.
Language: GDScript
Renderer: GLES 2
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/111
## Screenshots
![Screenshot](screenshots/hex.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -10,19 +10,17 @@ config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Hexagonal Game"
config/description="Very simple demo showing a hexagonal TileMap and TileSet."
run/main_scene="res://map.tscn"
config/icon="res://icon.png"
run/name=""
[display]
window/dpi/allow_hidpi=true
window/stretch/mode="2d"
window/stretch/aspect="expand"
@@ -67,5 +65,4 @@ move_up={
[rendering]
quality/driver/driver_name="GLES2"
environment/default_clear_color=Color( 0.172549, 0.219608, 0.129412, 1 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

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