Update 2D physics platformer for 4.0

This commit is contained in:
Jonathan Nicholl
2023-02-25 13:27:21 -05:00
parent 6cbfa30e8b
commit cbb297750f
45 changed files with 1462 additions and 979 deletions

View File

@@ -1,15 +1,15 @@
# Physics Platformer # Physics Platformer
This demo uses [`RigidDynamicBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigiddynamicbody2d.html) This demo uses [`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html)
for the player and enemies. for the player and enemies.
These character controllers are more powerful than These character controllers are more powerful than
[`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html), [`CharacterBody2D`](https://docs.godotengine.org/en/latest/classes/class_characterbody2d.html),
but can be more difficult to handle, as they require but can be more difficult to handle, as they require
manual modification of the RigidDynamicBody velocity. manual modification of the RigidDynamicBody velocity.
Language: GDScript Language: GDScript
Renderer: GLES 2 Renderer: Forward Plus
Check out this demo on the asset library: https://godotengine.org/asset-library/asset/119 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/119
@@ -17,7 +17,7 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/
The player and enemies use dynamic character The player and enemies use dynamic character
controllers for movement, made with controllers for movement, made with
[`RigidDynamicBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigiddynamicbody2d.html), [`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html),
which means that they can perfectly interact with physics which means that they can perfectly interact with physics
(there is a see-saw, and you can even ride enemies). (there is a see-saw, and you can even ride enemies).
Because of this, all movement must be done in sync with Because of this, all movement must be done in sync with

File diff suppressed because one or more lines are too long

View File

@@ -1,349 +0,0 @@
[gd_resource type="TileSet" load_steps=14 format=2]
[ext_resource path="res://tiles_demo.png" type="Texture2D" id=1]
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PackedVector2Array( -16, -12, 16, -12, 16, 16, -16, 16 )
[sub_resource type="ConvexPolygonShape2D" id=2]
points = PackedVector2Array( -16, 16, -16, -12, 12, -12, 12, 16 )
[sub_resource type="ConvexPolygonShape2D" id=3]
points = PackedVector2Array( -16, -16, 16, -16, 16, 16, -16, 16 )
[sub_resource type="ConvexPolygonShape2D" id=4]
points = PackedVector2Array( -16, -28, 16, 4, 16, 32, -16, 32 )
[sub_resource type="ConvexPolygonShape2D" id=5]
points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 12, 16 )
[sub_resource type="ConvexPolygonShape2D" id=6]
points = PackedVector2Array( -16, -12, 16, -12, 16, 12, -16, 12 )
[sub_resource type="ConvexPolygonShape2D" id=7]
points = PackedVector2Array( -16, -12, 12, -12, 12, 12, -16, 12 )
[sub_resource type="ConvexPolygonShape2D" id=8]
points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 12, 16 )
[sub_resource type="ConvexPolygonShape2D" id=9]
points = PackedVector2Array( -32, 16, -32, -16, -4, -16, -4, 16 )
[sub_resource type="ConvexPolygonShape2D" id=10]
points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 16, -12, 16, 16 )
[sub_resource type="ConvexPolygonShape2D" id=11]
points = PackedVector2Array( -16, 16, -16, -12, 16, -12, 16, 16 )
[sub_resource type="ConvexPolygonShape2D" id=12]
points = PackedVector2Array( -16, 16, -16, -12, 16, -12, 16, 16 )
[resource]
0/name = "floor"
0/texture = ExtResource( 1 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 1, 1, 1, 1 )
0/region = Rect2( 0, 0, 32, 32 )
0/tile_mode = 0
0/occluder_offset = Vector2( 16, 16 )
0/navigation_offset = Vector2( 16, 16 )
0/shape_offset = Vector2( 16, 16 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
0/shape = SubResource( 1 )
0/shape_one_way = false
0/shape_one_way_margin = 1.0
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
0/z_index = 0
1/name = "edge"
1/texture = ExtResource( 1 )
1/tex_offset = Vector2( 0, 0 )
1/modulate = Color( 1, 1, 1, 1 )
1/region = Rect2( 32, 0, 32, 32 )
1/tile_mode = 0
1/occluder_offset = Vector2( 16, 16 )
1/navigation_offset = Vector2( 16, 16 )
1/shape_offset = Vector2( 16, 16 )
1/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
1/shape = SubResource( 2 )
1/shape_one_way = false
1/shape_one_way_margin = 1.0
1/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 2 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
1/z_index = 0
2/name = "wall"
2/texture = ExtResource( 1 )
2/tex_offset = Vector2( 0, 0 )
2/modulate = Color( 1, 1, 1, 1 )
2/region = Rect2( 32, 32, 32, 32 )
2/tile_mode = 0
2/occluder_offset = Vector2( 16, 16 )
2/navigation_offset = Vector2( 16, 16 )
2/shape_offset = Vector2( 16, 16 )
2/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
2/shape = SubResource( 8 )
2/shape_one_way = false
2/shape_one_way_margin = 1.0
2/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 8 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
2/z_index = 0
3/name = "wall_deco"
3/texture = ExtResource( 1 )
3/tex_offset = Vector2( 0, 0 )
3/modulate = Color( 1, 1, 1, 1 )
3/region = Rect2( 160, 64, 64, 32 )
3/tile_mode = 0
3/occluder_offset = Vector2( 32, 16 )
3/navigation_offset = Vector2( 32, 16 )
3/shape_offset = Vector2( 32, 16 )
3/shape_transform = Transform2D( 1, 0, 0, 1, 32, 16 )
3/shape = SubResource( 9 )
3/shape_one_way = false
3/shape_one_way_margin = 1.0
3/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 9 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 32, 16 )
} ]
3/z_index = 0
4/name = "corner"
4/texture = ExtResource( 1 )
4/tex_offset = Vector2( 0, 0 )
4/modulate = Color( 1, 1, 1, 1 )
4/region = Rect2( 32, 64, 32, 32 )
4/tile_mode = 0
4/occluder_offset = Vector2( 16, 16 )
4/navigation_offset = Vector2( 16, 16 )
4/shape_offset = Vector2( 16, 16 )
4/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
4/shape = SubResource( 10 )
4/shape_one_way = false
4/shape_one_way_margin = 1.0
4/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 10 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
4/z_index = 0
5/name = "flowers"
5/texture = ExtResource( 1 )
5/tex_offset = Vector2( 0, 0 )
5/modulate = Color( 1, 1, 1, 1 )
5/region = Rect2( 96, 96, 32, 32 )
5/tile_mode = 0
5/occluder_offset = Vector2( 16, 16 )
5/navigation_offset = Vector2( 16, 16 )
5/shape_offset = Vector2( 16, 16 )
5/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
5/shape = SubResource( 11 )
5/shape_one_way = false
5/shape_one_way_margin = 1.0
5/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 11 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
5/z_index = 0
6/name = "tree_base"
6/texture = ExtResource( 1 )
6/tex_offset = Vector2( 0, 0 )
6/modulate = Color( 1, 1, 1, 1 )
6/region = Rect2( 128, 96, 32, 32 )
6/tile_mode = 0
6/occluder_offset = Vector2( 16, 16 )
6/navigation_offset = Vector2( 16, 16 )
6/shape_offset = Vector2( 16, 16 )
6/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
6/shape = SubResource( 12 )
6/shape_one_way = false
6/shape_one_way_margin = 1.0
6/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 12 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
6/z_index = 0
7/name = "tree_mid"
7/texture = ExtResource( 1 )
7/tex_offset = Vector2( 0, 0 )
7/modulate = Color( 1, 1, 1, 1 )
7/region = Rect2( 128, 64, 32, 32 )
7/tile_mode = 0
7/occluder_offset = Vector2( 16, 16 )
7/navigation_offset = Vector2( 16, 16 )
7/shape_offset = Vector2( 0, 0 )
7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
7/shape_one_way = false
7/shape_one_way_margin = 0.0
7/shapes = [ ]
7/z_index = 0
8/name = "tree_mid 2"
8/texture = ExtResource( 1 )
8/tex_offset = Vector2( 0, 0 )
8/modulate = Color( 1, 1, 1, 1 )
8/region = Rect2( 128, 32, 32, 32 )
8/tile_mode = 0
8/occluder_offset = Vector2( 16, 16 )
8/navigation_offset = Vector2( 16, 16 )
8/shape_offset = Vector2( 0, 0 )
8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
8/shape_one_way = false
8/shape_one_way_margin = 0.0
8/shapes = [ ]
8/z_index = 0
9/name = "tree_top"
9/texture = ExtResource( 1 )
9/tex_offset = Vector2( 0, 0 )
9/modulate = Color( 1, 1, 1, 1 )
9/region = Rect2( 128, 0, 32, 32 )
9/tile_mode = 0
9/occluder_offset = Vector2( 16, 16 )
9/navigation_offset = Vector2( 16, 16 )
9/shape_offset = Vector2( 0, 0 )
9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
9/shape_one_way = false
9/shape_one_way_margin = 0.0
9/shapes = [ ]
9/z_index = 0
10/name = "solid"
10/texture = ExtResource( 1 )
10/tex_offset = Vector2( 0, 0 )
10/modulate = Color( 1, 1, 1, 1 )
10/region = Rect2( 0, 32, 32, 32 )
10/tile_mode = 0
10/occluder_offset = Vector2( 16, 16 )
10/navigation_offset = Vector2( 16, 16 )
10/shape_offset = Vector2( 0, 0 )
10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
10/shape_one_way = false
10/shape_one_way_margin = 0.0
10/shapes = [ ]
10/z_index = 0
11/name = "ceiling"
11/texture = ExtResource( 1 )
11/tex_offset = Vector2( 0, 0 )
11/modulate = Color( 1, 1, 1, 1 )
11/region = Rect2( 192, 32, 32, 32 )
11/tile_mode = 0
11/occluder_offset = Vector2( 16, 16 )
11/navigation_offset = Vector2( 16, 16 )
11/shape_offset = Vector2( 16, 16 )
11/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
11/shape = SubResource( 3 )
11/shape_one_way = false
11/shape_one_way_margin = 1.0
11/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 3 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
11/z_index = 0
12/name = "ramp"
12/texture = ExtResource( 1 )
12/tex_offset = Vector2( 0, 0 )
12/modulate = Color( 1, 1, 1, 1 )
12/region = Rect2( 64, 64, 32, 64 )
12/tile_mode = 0
12/occluder_offset = Vector2( 16, 32 )
12/navigation_offset = Vector2( 16, 32 )
12/shape_offset = Vector2( 16, 32 )
12/shape_transform = Transform2D( 1, 0, 0, 1, 16, 32 )
12/shape = SubResource( 4 )
12/shape_one_way = false
12/shape_one_way_margin = 1.0
12/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 4 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 32 )
} ]
12/z_index = 0
13/name = "ceiling2wall"
13/texture = ExtResource( 1 )
13/tex_offset = Vector2( 0, 0 )
13/modulate = Color( 1, 1, 1, 1 )
13/region = Rect2( 224, 32, 32, 32 )
13/tile_mode = 0
13/occluder_offset = Vector2( 16, 16 )
13/navigation_offset = Vector2( 16, 16 )
13/shape_offset = Vector2( 16, 16 )
13/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
13/shape = SubResource( 5 )
13/shape_one_way = false
13/shape_one_way_margin = 1.0
13/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 5 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
13/z_index = 0
14/name = "platform_floor"
14/texture = ExtResource( 1 )
14/tex_offset = Vector2( 0, 0 )
14/modulate = Color( 1, 1, 1, 1 )
14/region = Rect2( 64, 0, 32, 32 )
14/tile_mode = 0
14/occluder_offset = Vector2( 16, 16 )
14/navigation_offset = Vector2( 16, 16 )
14/shape_offset = Vector2( 16, 16 )
14/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
14/shape = SubResource( 6 )
14/shape_one_way = false
14/shape_one_way_margin = 1.0
14/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 6 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
14/z_index = 0
15/name = "platform_edge"
15/texture = ExtResource( 1 )
15/tex_offset = Vector2( 0, 0 )
15/modulate = Color( 1, 1, 1, 1 )
15/region = Rect2( 96, 0, 32, 32 )
15/tile_mode = 0
15/occluder_offset = Vector2( 16, 16 )
15/navigation_offset = Vector2( 16, 16 )
15/shape_offset = Vector2( 16, 16 )
15/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
15/shape = SubResource( 7 )
15/shape_one_way = false
15/shape_one_way_margin = 1.0
15/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 7 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
} ]
15/z_index = 0

View File

@@ -1,35 +0,0 @@
[gd_scene load_steps=5 format=2]
[ext_resource path="res://background/plank.png" type="Texture2D" id=1]
[ext_resource path="res://background/plankpin.png" type="Texture2D" id=2]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2(64, 4)
[sub_resource type="RectangleShape2D" id=2]
extents = Vector2(8, 13.5)
[node name="Seesaw" type="Node2D"]
[node name="Plank" type="RigidDynamicBody2D" parent="."]
mass = 5.10204
[node name="Sprite2D" type="Sprite2D" parent="Plank"]
texture = ExtResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Plank"]
shape = SubResource( 1 )
[node name="Pin" type="PinJoint2D" parent="."]
node_a = NodePath("../Plank")
node_b = NodePath("../Pillar")
[node name="Pillar" type="StaticBody2D" parent="."]
[node name="Sprite2D" type="Sprite2D" parent="Pillar"]
position = Vector2(0, 10)
texture = ExtResource( 2 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="Pillar"]
position = Vector2(0, 12.5)
shape = SubResource( 2 )

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/plank.png-d70731fc82f225d8353819786c2ed28a.ct
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/plankpin.png-68d06cc4b9ab95f9d0142d1a4c768140
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_1.png-19f55c25a7e1985c92542fa
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_2.png-869806dcc546591f3d754e3
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_3.png-831c6ed9fa8b4070081428a
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_fg_1.png-20c90ebded5095c6863cdf6b1b
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_fg_2.png-2b54decd69e8aff2caa33640a3
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_sky.png-377ea542199b2e23d7a822ed940
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -0,0 +1,35 @@
[gd_scene load_steps=5 format=3 uid="uid://rxbjx7rhfd8k"]
[ext_resource type="Texture2D" uid="uid://c3w6uvr4jjkwa" path="res://background/plank.png" id="1"]
[ext_resource type="Texture2D" uid="uid://ci8y3ieuf3ltc" path="res://background/plankpin.png" id="2"]
[sub_resource type="RectangleShape2D" id="1"]
size = Vector2(128, 8)
[sub_resource type="RectangleShape2D" id="2"]
size = Vector2(16, 27)
[node name="Seesaw" type="Node2D"]
[node name="Plank" type="RigidBody2D" parent="."]
mass = 5.10204
[node name="Sprite2D" type="Sprite2D" parent="Plank"]
texture = ExtResource("1")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Plank"]
shape = SubResource("1")
[node name="Pin" type="PinJoint2D" parent="."]
node_a = NodePath("../Plank")
node_b = NodePath("../Pillar")
[node name="Pillar" type="StaticBody2D" parent="."]
[node name="Sprite2D" type="Sprite2D" parent="Pillar"]
position = Vector2(0, 10)
texture = ExtResource("2")
[node name="CollisionShape2D" type="CollisionShape2D" parent="Pillar"]
position = Vector2(0, 12.5)
shape = SubResource("2")

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/coin.png-c9e5c2f51b2a10beb2d794afbbee004f.cte
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -1,5 +1,5 @@
class_name Enemy class_name Enemy extends RigidBody2D
extends RigidBody2D
const WALK_SPEED = 50 const WALK_SPEED = 50
@@ -8,40 +8,39 @@ enum State {
DYING, DYING,
} }
var state = State.WALKING var _state := State.WALKING
var direction = -1 var direction := -1
var anim = "" var anim := ""
var Bullet = preload("res://player/bullet.gd") var Bullet := preload("res://player/bullet.gd")
@onready var rc_left = $RaycastLeft @onready var rc_left := $RaycastLeft as RayCast2D
@onready var rc_right = $RaycastRight @onready var rc_right := $RaycastRight as RayCast2D
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var new_anim = anim
if state == State.DYING: func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
var velocity := state.get_linear_velocity()
var new_anim := anim
if _state == State.DYING:
new_anim = "explode" new_anim = "explode"
elif state == State.WALKING: elif _state == State.WALKING:
new_anim = "walk" new_anim = "walk"
var wall_side = 0.0 var wall_side := 0.0
for i in range(s.get_contact_count()): for collider_index in state.get_contact_count():
var cc = s.get_contact_collider_object(i) var collider := state.get_contact_collider_object(collider_index)
var dp = s.get_contact_local_normal(i) var collision_normal := state.get_contact_local_normal(collider_index)
if cc: if collider is Bullet and not (collider as Bullet).disabled:
if cc is Bullet and not cc.disabled: _bullet_collider.call_deferred(collider, state, collision_normal)
# enqueue call break
call_deferred("_bullet_collider", cc, s, dp)
break
if dp.x > 0.9: if collision_normal.x > 0.9:
wall_side = 1.0 wall_side = 1.0
elif dp.x < -0.9: elif collision_normal.x < -0.9:
wall_side = -1.0 wall_side = -1.0
if wall_side != 0 and wall_side != direction: if wall_side != 0 and wall_side != direction:
@@ -54,35 +53,36 @@ func _integrate_forces(s):
direction = -direction direction = -direction
($Sprite2D as Sprite2D).scale.x = -direction ($Sprite2D as Sprite2D).scale.x = -direction
lv.x = direction * WALK_SPEED velocity.x = direction * WALK_SPEED
if anim != new_anim: if anim != new_anim:
anim = new_anim anim = new_anim
($AnimationPlayer as AnimationPlayer).play(anim) ($AnimationPlayer as AnimationPlayer).play(anim)
s.set_linear_velocity(lv) state.set_linear_velocity(velocity)
func _die(): func _die() -> void:
queue_free() queue_free()
func _pre_explode(): func _pre_explode() -> void:
#make sure nothing collides against this #make sure nothing collides against this
$Shape1.queue_free() $Shape1.queue_free()
$Shape2.queue_free() $Shape2.queue_free()
$Shape3.queue_free() $Shape3.queue_free()
# Stay there
#mode = MODE_STATIC
($SoundExplode as AudioStreamPlayer2D).play() ($SoundExplode as AudioStreamPlayer2D).play()
func _bullet_collider(cc, s, dp): func _bullet_collider(
#mode = MODE_RIGID collider: Bullet,
state = State.DYING state: PhysicsDirectBodyState2D,
collision_normal: Vector2
) -> void:
_state = State.DYING
s.set_angular_velocity(sign(dp.x) * 33.0) state.set_angular_velocity(signf(collision_normal.x) * 33.0)
physics_material_override.friction = 1 physics_material_override.friction = 1
cc.disable() collider.disable()
($SoundHit as AudioStreamPlayer2D).play() ($SoundHit as AudioStreamPlayer2D).play()

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/enemy.png-1891d9038eeed672a2459bc4e7db5910.ct
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -1,22 +1,22 @@
[gd_scene load_steps=12 format=2] [gd_scene load_steps=14 format=3 uid="uid://daqqtote00syu"]
[ext_resource path="res://enemy/enemy.gd" type="Script" id=1] [ext_resource type="Script" path="res://enemy/enemy.gd" id="1_hjwkx"]
[ext_resource path="res://enemy/enemy.png" type="Texture2D" id=2] [ext_resource type="Texture2D" uid="uid://crrmmbu8k46tl" path="res://enemy/enemy.png" id="2_org2d"]
[ext_resource path="res://player/bullet.png" type="Texture2D" id=3] [ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3_7unrb"]
[ext_resource path="res://audio/sound_hit.wav" type="AudioStream" id=4] [ext_resource type="AudioStream" uid="uid://cfssio7r2t7wq" path="res://audio/sound_hit.wav" id="4_5rkwm"]
[ext_resource path="res://audio/sound_explode.wav" type="AudioStream" id=5] [ext_resource type="AudioStream" uid="uid://bulmr2lpb7y4h" path="res://audio/sound_explode.wav" id="5_t2e2f"]
[sub_resource type="PhysicsMaterial" id=1] [sub_resource type="PhysicsMaterial" id="1"]
[sub_resource type="Animation" id=2] [sub_resource type="Animation" id="2"]
length = 6.0 length = 6.0
step = 0.0 step = 0.0
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame") tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
@@ -24,11 +24,11 @@ tracks/0/keys = {
"values": [4] "values": [4]
} }
tracks/1/type = "value" tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Explosion:emitting") tracks/1/path = NodePath("Explosion:emitting")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/keys = { tracks/1/keys = {
"times": PackedFloat32Array(1), "times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1),
@@ -36,28 +36,28 @@ tracks/1/keys = {
"values": [true] "values": [true]
} }
tracks/2/type = "method" tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".") tracks/2/path = NodePath(".")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(0.8, 2), "times": PackedFloat32Array(1.04, 2),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
"values": [{ "values": [{
"args": [], "args": [],
"method": "_pre_explode" "method": &"_pre_explode"
}, { }, {
"args": [], "args": [],
"method": "_die" "method": &"_die"
}] }]
} }
tracks/3/type = "value" tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Sprite2D:self_modulate") tracks/3/path = NodePath("Sprite2D:self_modulate")
tracks/3/interp = 1 tracks/3/interp = 1
tracks/3/loop_wrap = true tracks/3/loop_wrap = true
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/keys = { tracks/3/keys = {
"times": PackedFloat32Array(0.5, 1.1), "times": PackedFloat32Array(0.5, 1.1),
"transitions": PackedFloat32Array(1, 1), "transitions": PackedFloat32Array(1, 1),
@@ -65,16 +65,16 @@ tracks/3/keys = {
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
} }
[sub_resource type="Animation" id=3] [sub_resource type="Animation" id="3"]
length = 6.75 length = 6.75
loop = true loop_mode = 1
step = 0.25 step = 0.25
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame") tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75), "times": PackedFloat32Array(0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
@@ -82,16 +82,16 @@ tracks/0/keys = {
"values": [5, 6, 5, 6, 5, 6, 7, 6, 7, 5] "values": [5, 6, 5, 6, 5, 6, 7, 6, 7, 5]
} }
[sub_resource type="Animation" id=4] [sub_resource type="Animation" id="4"]
length = 1.25 length = 1.25
loop = true loop_mode = 1
step = 0.25 step = 0.25
tracks/0/type = "value" tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame") tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1 tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1, 1.25), "times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1, 1.25),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
@@ -99,55 +99,85 @@ tracks/0/keys = {
"values": [0, 1, 2, 3, 4, 0] "values": [0, 1, 2, 3, 4, 0]
} }
[sub_resource type="CircleShape2D" id=5] [sub_resource type="Animation" id="Animation_a7qal"]
resource_name = "RESET"
length = 0.01
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite2D:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite2D:self_modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ay0tp"]
_data = {
"RESET": SubResource("Animation_a7qal"),
"explode": SubResource("2"),
"idle": SubResource("3"),
"walk": SubResource("4")
}
[sub_resource type="CircleShape2D" id="5"]
radius = 7.0 radius = 7.0
[sub_resource type="Gradient" id=6] [sub_resource type="Gradient" id="6"]
offsets = PackedFloat32Array(0.5, 1) offsets = PackedFloat32Array(0.5, 1)
colors = PackedColorArray(1, 1, 1, 0.501961, 0, 0, 0, 0) colors = PackedColorArray(1, 1, 1, 0.501961, 0, 0, 0, 0)
[node name="Enemy" type="RigidDynamicBody2D"] [node name="Enemy" type="RigidBody2D"]
mode = 2 physics_material_override = SubResource("1")
physics_material_override = SubResource( 1 ) max_contacts_reported = 4
contacts_reported = 4 contact_monitor = true
script = ExtResource( 1 ) lock_rotation = true
script = ExtResource("1_hjwkx")
[node name="Enabler" type="VisibleOnScreenEnabler2D" parent="."]
position = Vector2(8.12845, 5.5017)
scale = Vector2(11.7528, 5.43145)
pause_particles = false
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
anims/explode = SubResource( 2 ) libraries = {
anims/idle = SubResource( 3 ) "": SubResource("AnimationLibrary_ay0tp")
anims/walk = SubResource( 4 ) }
[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="."]
rect = Rect2(-150, -100, 300, 200)
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource( 2 ) texture = ExtResource("2_org2d")
hframes = 8 hframes = 8
frame = 4
[node name="Shape1" type="CollisionShape2D" parent="."] [node name="Shape1" type="CollisionShape2D" parent="."]
position = Vector2(-0.54036, -1.08072) position = Vector2(-0.54036, -1.08072)
shape = SubResource( 5 ) shape = SubResource("5")
[node name="Shape2" type="CollisionShape2D" parent="."] [node name="Shape2" type="CollisionShape2D" parent="."]
position = Vector2(3.24216, 1.62108) position = Vector2(3.24216, 1.62108)
shape = SubResource( 5 ) shape = SubResource("5")
[node name="Shape3" type="CollisionShape2D" parent="."] [node name="Shape3" type="CollisionShape2D" parent="."]
position = Vector2(-6.2475, 1.76707) position = Vector2(-6.2475, 1.76707)
shape = SubResource( 5 ) shape = SubResource("5")
[node name="RaycastLeft" type="RayCast2D" parent="."] [node name="RaycastLeft" type="RayCast2D" parent="."]
position = Vector2(-14, -4.672) position = Vector2(-14, -4.672)
enabled = true
cast_to = Vector2(0, 22.5)
[node name="RaycastRight" type="RayCast2D" parent="."] [node name="RaycastRight" type="RayCast2D" parent="."]
position = Vector2(11, -4.672) position = Vector2(11, -4.672)
enabled = true
cast_to = Vector2(0, 22.5)
[node name="Explosion" type="CPUParticles2D" parent="."] [node name="Explosion" type="CPUParticles2D" parent="."]
modulate = Color(1, 1, 1, 0.685843) modulate = Color(1, 1, 1, 0.685843)
@@ -157,19 +187,15 @@ lifetime = 0.5
one_shot = true one_shot = true
speed_scale = 1.2 speed_scale = 1.2
explosiveness = 0.76 explosiveness = 0.76
texture = ExtResource( 3 ) texture = ExtResource("3_7unrb")
emission_shape = 1 emission_shape = 1
emission_sphere_radius = 8.0 emission_sphere_radius = 8.0
spread = 180.0 spread = 180.0
gravity = Vector2(0, 0) gravity = Vector2(0, 0)
initial_velocity = 120.0 color_ramp = SubResource("6")
initial_velocity_random = 0.5
angle_random = 1.0
scale_amount_random = 1.0
color_ramp = SubResource( 6 )
[node name="SoundHit" type="AudioStreamPlayer2D" parent="."] [node name="SoundHit" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource( 4 ) stream = ExtResource("4_5rkwm")
[node name="SoundExplode" type="AudioStreamPlayer2D" parent="."] [node name="SoundExplode" type="AudioStreamPlayer2D" parent="."]
stream = ExtResource( 5 ) stream = ExtResource("5_t2e2f")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -2,23 +2,23 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://dv2hr3igi3roi" uid="uid://upnbycigfu4k"
path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://icon.png" source_file="res://icon.webp"
dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"] dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -1,16 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://platform/moving_platform.gd" type="Script" id=1]
[ext_resource path="res://platform/moving_platform.png" type="Texture2D" id=2]
[node name="MovingPlatform" type="Node2D"]
script = ExtResource( 1 )
[node name="Platform" type="RigidDynamicBody2D" parent="."]
mode = 3
[node name="Sprite2D" type="Sprite2D" parent="Platform"]
texture = ExtResource( 2 )
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Platform"]
polygon = PackedVector2Array(-44, -12, 44, -12, 44, 12, -44, 12)

View File

@@ -1,16 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://platform/one_way_platform.png" type="Texture2D" id=1]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2(50, 5)
[node name="OneWayPlatform" type="StaticBody2D"]
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource( 1 )
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(0.73152, -6.5836)
shape = SubResource( 1 )
one_way_collision = true

View File

@@ -1,17 +0,0 @@
class_name MovingPlatform
extends Node2D
@export var motion = Vector2()
@export var cycle = 1.0
var accum = 0.0
func _physics_process(delta):
accum += delta * (1.0 / cycle) * TAU
accum = fmod(accum, TAU)
var d = sin(accum)
var xf = Transform2D()
xf[2]= motion * d
($Platform as RigidBody2D).transform = xf

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/moving_platform.png-7e92061cd93e8b0235df711d3
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -0,0 +1,11 @@
[gd_scene load_steps=2 format=3 uid="uid://dtbrdmojpvetu"]
[ext_resource type="Texture2D" uid="uid://cde7btbdorp8f" path="res://platform/moving_platform.png" id="2"]
[node name="MovingPlatform" type="CharacterBody2D"]
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("2")
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
polygon = PackedVector2Array(-44, -12, 44, -12, 44, 12, -44, 12)

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/one_way_platform.png-2865772e209813c1636a14ae
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -0,0 +1,16 @@
[gd_scene load_steps=3 format=3 uid="uid://dkmxopg1dknq8"]
[ext_resource type="Texture2D" uid="uid://c15sicsdamq2o" path="res://platform/one_way_platform.png" id="1"]
[sub_resource type="RectangleShape2D" id="1"]
size = Vector2(110, 10)
[node name="OneWayPlatform" type="StaticBody2D"]
[node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("1")
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(0.73152, -6.5836)
shape = SubResource("1")
one_way_collision = true

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/bullet.png-5615cb9904aab8db60fe6f48e996475f.c
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_fire.png-67a49910acd764fd7c67429af0ad5cb8
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_jump.png-0d4d2b2d1a7d2c11e3e4fd800b8589ed
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_left.png-95ec3a371455889d592aa8cae0a755bc
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_right.png-db9bb4651315f3d42b87bd17a86cce7
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -1,27 +1,5 @@
class_name Player class_name Player extends RigidBody2D
extends RigidBody2D
# Character Demo, written by Juan Linietsky.
#
# Implementation of a 2D Character controller.
# This implementation uses the physics engine for
# controlling a character, in a very similar way
# than a 3D character controller would be implemented.
#
# Using the physics engine for this has the main advantages:
# - Easy to write.
# - Interaction with other physics-based objects is free
# - Only have to deal with the object linear velocity, not position
# - All collision/area framework available
#
# But also has the following disadvantages:
# - Objects may bounce a little bit sometimes
# - Going up ramps sends the chracter flying up, small hack is needed.
# - A ray collider is needed to avoid sliding down on ramps and
# undesiderd bumps, small steps and rare numerical precision errors.
# (another alternative may be to turn on friction when the character is not moving).
# - Friction cant be used, so floor velocity must be considered
# for moving platforms.
const WALK_ACCEL = 500.0 const WALK_ACCEL = 500.0
const WALK_DEACCEL = 500.0 const WALK_DEACCEL = 500.0
@@ -33,63 +11,64 @@ const STOP_JUMP_FORCE = 450.0
const MAX_SHOOT_POSE_TIME = 0.3 const MAX_SHOOT_POSE_TIME = 0.3
const MAX_FLOOR_AIRBORNE_TIME = 0.15 const MAX_FLOOR_AIRBORNE_TIME = 0.15
var anim = "" var anim := ""
var siding_left = false var siding_left := false
var jumping = false var jumping := false
var stopping_jump = false var stopping_jump := false
var shooting = false var shooting := false
var floor_h_velocity = 0.0 var floor_h_velocity: float = 0.0
var airborne_time = 1e20 var airborne_time: float = 1e20
var shoot_time = 1e20 var shoot_time: float = 1e20
var Bullet = preload("res://player/Bullet.tscn") var Bullet := preload("res://player/bullet.tscn")
var Enemy = preload("res://enemy/Enemy.tscn") var Enemy := preload("res://enemy/enemy.tscn")
@onready var sound_jump = $SoundJump @onready var sound_jump := $SoundJump as AudioStreamPlayer2D
@onready var sound_shoot = $SoundShoot @onready var sound_shoot := $SoundShoot as AudioStreamPlayer2D
@onready var sprite = $Sprite2D @onready var sprite := $Sprite2D as Sprite2D
@onready var sprite_smoke = sprite.get_node(^"Smoke") @onready var sprite_smoke := sprite.get_node(^"Smoke") as CPUParticles2D
@onready var animation_player = $AnimationPlayer @onready var animation_player := $AnimationPlayer as AnimationPlayer
@onready var bullet_shoot = $BulletShoot @onready var bullet_shoot := $BulletShoot as Marker2D
func _integrate_forces(s):
var lv = s.get_linear_velocity()
var step = s.get_step()
var new_anim = anim func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
var new_siding_left = siding_left var velocity := state.get_linear_velocity()
var step := state.get_step()
var new_anim := anim
var new_siding_left := siding_left
# Get player input. # Get player input.
var move_left = Input.is_action_pressed(&"move_left") var move_left := Input.is_action_pressed(&"move_left")
var move_right = Input.is_action_pressed(&"move_right") var move_right := Input.is_action_pressed(&"move_right")
var jump = Input.is_action_pressed(&"jump") var jump := Input.is_action_pressed(&"jump")
var shoot = Input.is_action_pressed(&"shoot") var shoot := Input.is_action_pressed(&"shoot")
var spawn = Input.is_action_pressed(&"spawn") var spawn := Input.is_action_pressed(&"spawn")
if spawn: if spawn:
call_deferred("_spawn_enemy_above") _spawn_enemy_above.call_deferred()
# Deapply prev floor velocity. # Deapply prev floor velocity.
lv.x -= floor_h_velocity velocity.x -= floor_h_velocity
floor_h_velocity = 0.0 floor_h_velocity = 0.0
# Find the floor (a contact with upwards facing collision normal). # Find the floor (a contact with upwards facing collision normal).
var found_floor = false var found_floor := false
var floor_index = -1 var floor_index := -1
for x in range(s.get_contact_count()): for contact_index in state.get_contact_count():
var ci = s.get_contact_local_normal(x) var collision_normal = state.get_contact_local_normal(contact_index)
if ci.dot(Vector2(0, -1)) > 0.6: if collision_normal.dot(Vector2(0, -1)) > 0.6:
found_floor = true found_floor = true
floor_index = x floor_index = contact_index
# A good idea when implementing characters of all kinds, # A good idea when implementing characters of all kinds,
# compensates for physics imprecision, as well as human reaction delay. # compensates for physics imprecision, as well as human reaction delay.
if shoot and not shooting: if shoot and not shooting:
call_deferred("_shot_bullet") _shot_bullet.call_deferred()
else: else:
shoot_time += step shoot_time += step
@@ -98,49 +77,49 @@ func _integrate_forces(s):
else: else:
airborne_time += step # Time it spent in the air. airborne_time += step # Time it spent in the air.
var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME var on_floor := airborne_time < MAX_FLOOR_AIRBORNE_TIME
# Process jump. # Process jump.
if jumping: if jumping:
if lv.y > 0: if velocity.y > 0:
# Set off the jumping flag if going down. # Set off the jumping flag if going down.
jumping = false jumping = false
elif not jump: elif not jump:
stopping_jump = true stopping_jump = true
if stopping_jump: if stopping_jump:
lv.y += STOP_JUMP_FORCE * step velocity.y += STOP_JUMP_FORCE * step
if on_floor: if on_floor:
# Process logic when character is on floor. # Process logic when character is on floor.
if move_left and not move_right: if move_left and not move_right:
if lv.x > -WALK_MAX_VELOCITY: if velocity.x > -WALK_MAX_VELOCITY:
lv.x -= WALK_ACCEL * step velocity.x -= WALK_ACCEL * step
elif move_right and not move_left: elif move_right and not move_left:
if lv.x < WALK_MAX_VELOCITY: if velocity.x < WALK_MAX_VELOCITY:
lv.x += WALK_ACCEL * step velocity.x += WALK_ACCEL * step
else: else:
var xv = abs(lv.x) var xv := absf(velocity.x)
xv -= WALK_DEACCEL * step xv -= WALK_DEACCEL * step
if xv < 0: if xv < 0:
xv = 0 xv = 0
lv.x = sign(lv.x) * xv velocity.x = signf(velocity.x) * xv
# Check jump. # Check jump.
if not jumping and jump: if not jumping and jump:
lv.y = -JUMP_VELOCITY velocity.y = -JUMP_VELOCITY
jumping = true jumping = true
stopping_jump = false stopping_jump = false
sound_jump.play() sound_jump.play()
# Check siding. # Check siding.
if lv.x < 0 and move_left: if velocity.x < 0 and move_left:
new_siding_left = true new_siding_left = true
elif lv.x > 0 and move_right: elif velocity.x > 0 and move_right:
new_siding_left = false new_siding_left = false
if jumping: if jumping:
new_anim = "jumping" new_anim = "jumping"
elif abs(lv.x) < 0.1: elif absf(velocity.x) < 0.1:
if shoot_time < MAX_SHOOT_POSE_TIME: if shoot_time < MAX_SHOOT_POSE_TIME:
new_anim = "idle_weapon" new_anim = "idle_weapon"
else: else:
@@ -153,20 +132,20 @@ func _integrate_forces(s):
else: else:
# Process logic when the character is in the air. # Process logic when the character is in the air.
if move_left and not move_right: if move_left and not move_right:
if lv.x > -WALK_MAX_VELOCITY: if velocity.x > -WALK_MAX_VELOCITY:
lv.x -= AIR_ACCEL * step velocity.x -= AIR_ACCEL * step
elif move_right and not move_left: elif move_right and not move_left:
if lv.x < WALK_MAX_VELOCITY: if velocity.x < WALK_MAX_VELOCITY:
lv.x += AIR_ACCEL * step velocity.x += AIR_ACCEL * step
else: else:
var xv = abs(lv.x) var xv := absf(velocity.x)
xv -= AIR_DEACCEL * step xv -= AIR_DEACCEL * step
if xv < 0: if xv < 0:
xv = 0 xv = 0
lv.x = sign(lv.x) * xv velocity.x = signf(velocity.x) * xv
if lv.y < 0: if velocity.y < 0:
if shoot_time < MAX_SHOOT_POSE_TIME: if shoot_time < MAX_SHOOT_POSE_TIME:
new_anim = "jumping_weapon" new_anim = "jumping_weapon"
else: else:
@@ -195,36 +174,35 @@ func _integrate_forces(s):
# Apply floor velocity. # Apply floor velocity.
if found_floor: if found_floor:
floor_h_velocity = s.get_contact_collider_velocity_at_position(floor_index).x floor_h_velocity = state.get_contact_collider_velocity_at_position(floor_index).x
lv.x += floor_h_velocity velocity.x += floor_h_velocity
# Finally, apply gravity and set back the linear velocity. # Finally, apply gravity and set back the linear velocity.
lv += s.get_total_gravity() * step velocity += state.get_total_gravity() * step
s.set_linear_velocity(lv) state.set_linear_velocity(velocity)
func _shot_bullet(): func _shot_bullet() -> void:
shoot_time = 0 shoot_time = 0
var bi = Bullet.instantiate() var bullet := Bullet.instantiate() as RigidBody2D
var ss var speed_scale: float
if siding_left: if siding_left:
ss = -1.0 speed_scale = -1.0
else: else:
ss = 1.0 speed_scale = 1.0
var pos = position + bullet_shoot.position * Vector2(ss, 1.0)
bi.position = pos bullet.position = self.position + bullet_shoot.position * Vector2(speed_scale, 1.0)
get_parent().add_child(bi) get_parent().add_child(bullet)
bi.linear_velocity = Vector2(400.0 * ss, -40) bullet.linear_velocity = Vector2(400.0 * speed_scale, -40)
sprite_smoke.restart() sprite_smoke.restart()
sound_shoot.play() sound_shoot.play()
add_collision_exception_with(bi) # Make bullet and this not collide. add_collision_exception_with(bullet) # Make bullet and this not collide.
func _spawn_enemy_above(): func _spawn_enemy_above() -> void:
var e = Enemy.instantiate() var enemy := Enemy.instantiate() as RigidBody2D
e.position = position + 50 * Vector2.UP enemy.position = self.position + 50 * Vector2.UP
get_parent().add_child(e) get_parent().add_child(enemy)

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=20 format=3 uid="uid://bv85r3nk410cj"] [gd_scene load_steps=20 format=3 uid="uid://bbxsp4gp554vh"]
[ext_resource type="Script" path="res://player/player.gd" id="1"] [ext_resource type="Script" path="res://player/player.gd" id="1"]
[ext_resource type="Texture2D" uid="uid://u5mto8jq4nhu" path="res://player/robot_demo.png" id="2"] [ext_resource type="Texture2D" uid="uid://dh57uloeigwj6" path="res://player/player.webp" id="2_675nc"]
[ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3"] [ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3"]
[ext_resource type="AudioStream" uid="uid://gw2a4ii0oby2" path="res://audio/sound_shoot.wav" id="8"] [ext_resource type="AudioStream" uid="uid://gw2a4ii0oby2" path="res://audio/sound_shoot.wav" id="8"]
[ext_resource type="AudioStream" uid="uid://bpyko2i13mj0v" path="res://audio/sound_jump.wav" id="9"] [ext_resource type="AudioStream" uid="uid://bpyko2i13mj0v" path="res://audio/sound_jump.wav" id="9"]
@@ -194,10 +194,13 @@ length = 18.0
mass = 1.5 mass = 1.5
physics_material_override = SubResource("1") physics_material_override = SubResource("1")
custom_integrator = true custom_integrator = true
max_contacts_reported = 4
contact_monitor = true
lock_rotation = true
script = ExtResource("1") script = ExtResource("1")
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture = ExtResource("2") texture = ExtResource("2_675nc")
hframes = 16 hframes = 16
vframes = 2 vframes = 2
@@ -220,7 +223,6 @@ libraries = {
} }
[node name="Camera2D" type="Camera2D" parent="."] [node name="Camera2D" type="Camera2D" parent="."]
current = true
zoom = Vector2(2, 2) zoom = Vector2(2, 2)
limit_left = 0 limit_left = 0
limit_top = 0 limit_top = 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -2,23 +2,23 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://u5mto8jq4nhu" uid="uid://dh57uloeigwj6"
path="res://.godot/imported/robot_demo.png-7165a8ae8f36b01883df6b585a93f592.ctex" path="res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"
metadata={ metadata={
"vram_texture": false "vram_texture": false
} }
[deps] [deps]
source_file="res://player/robot_demo.png" source_file="res://player/player.webp"
dest_files=["res://.godot/imported/robot_demo.png-7165a8ae8f36b01883df6b585a93f592.ctex"] dest_files=["res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"]
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -8,40 +8,6 @@
config_version=5 config_version=5
_global_script_classes=[{
"base": "RigidBody2D",
"class": &"Bullet",
"language": &"GDScript",
"path": "res://player/bullet.gd"
}, {
"base": "Area2D",
"class": &"Coin",
"language": &"GDScript",
"path": "res://coin/coin.gd"
}, {
"base": "RigidBody2D",
"class": &"Enemy",
"language": &"GDScript",
"path": "res://enemy/enemy.gd"
}, {
"base": "Node2D",
"class": &"MovingPlatform",
"language": &"GDScript",
"path": "res://platform/moving_platform.gd"
}, {
"base": "RigidBody2D",
"class": &"Player",
"language": &"GDScript",
"path": "res://player/player.gd"
}]
_global_script_class_icons={
"Bullet": "",
"Coin": "",
"Enemy": "",
"MovingPlatform": "",
"Player": ""
}
[application] [application]
config/name="Physics-Based Platformer 2D" config/name="Physics-Based Platformer 2D"
@@ -49,9 +15,9 @@ config/description="This demo uses RigidDynamicBody2D for the player and enemies
character controllers are more powerful than CharacterBody2D, character controllers are more powerful than CharacterBody2D,
but can be more difficult to handle, as they require but can be more difficult to handle, as they require
manual modification of the RigidDynamicBody3D velocity." manual modification of the RigidDynamicBody3D velocity."
run/main_scene="res://Stage.tscn" run/main_scene="res://stage.tscn"
config/features=PackedStringArray("4.0") config/features=PackedStringArray("4.0")
config/icon="res://icon.png" config/icon="res://icon.webp"
[debug] [debug]
@@ -95,39 +61,39 @@ texture={
jump={ jump={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
] ]
} }
move_left={ move_left={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
] ]
} }
move_right={ move_right={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
] ]
} }
shoot={ shoot={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null) , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null) , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
] ]
} }
spawn={ spawn={
"deadzone": 0.5, "deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777244,"physical_keycode":0,"unicode":0,"echo":false,"script":null) "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777244,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
] ]
} }

File diff suppressed because one or more lines are too long

View File

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/tiles_demo.png-7ca5c7c5c02ab8abe0d585a6a8f086
[params] [params]
compress/mode=0 compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7 compress/lossy_quality=0.7
compress/hdr_compression=1 compress/hdr_compression=1
compress/bptc_ldr=0
compress/normal_map=0 compress/normal_map=0
compress/channel_pack=0 compress/channel_pack=0
mipmaps/generate=false mipmaps/generate=false

View File

@@ -0,0 +1,798 @@
[gd_resource type="TileSet" load_steps=18 format=3 uid="uid://rowrak7ls50v"]
[ext_resource type="Texture2D" uid="uid://dbcdt0wqr3gd3" path="res://tiles_demo.png" id="1"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_va8am"]
texture = ExtResource("1")
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 16, -16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 16, 16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -16, -16, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -16, 16, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 16, -16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 16, 16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -16, -16, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -16, 16, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dri2i"]
texture = ExtResource("1")
margins = Vector2i(32, 0)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 12, -12, 12, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -12, -12, -12, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 12, 12, 12, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -12, 12, -12, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 12, -12, 12, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -12, -12, -12, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 12, 12, 12, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -12, 12, -12, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_hfgct"]
texture = ExtResource("1")
margins = Vector2i(0, 32)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7xlxp"]
texture = ExtResource("1")
margins = Vector2i(192, 32)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_64p8q"]
texture = ExtResource("1")
margins = Vector2i(64, 32)
texture_region_size = Vector2i(32, 96)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -10, 16, 22, 16, 48, -16, 48)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 22, 16, -10, 16, 48, -16, 48)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -48, 16, -48, 16, -22, -16, 10)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -48, 16, -48, 16, 10, -16, -22)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -28, 16, 4, 16, 32, -16, 32)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -28, -16, 4, -16, 32, 16, 32)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 28, 16, -4, 16, -32, -16, -32)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 28, -16, -4, -16, -32, 16, -32)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_bgjgk"]
texture = ExtResource("1")
margins = Vector2i(224, 32)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_uq55q"]
texture = ExtResource("1")
margins = Vector2i(64, 0)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 12, -16, 12)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 12, 16, 12)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -12, -16, -12)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -12, 16, -12)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 12, -16, 12)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 12, 16, 12)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -12, -16, -12)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -12, 16, -12)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_l5dh6"]
texture = ExtResource("1")
margins = Vector2i(96, 0)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 12, -12, 12, 12, -16, 12)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -12, -12, -12, 12, 16, 12)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 12, 12, 12, -12, -16, -12)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -12, 12, -12, -12, 16, -12)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 12, -12, 12, 12, -16, 12)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -12, -12, -12, 12, 16, 12)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 12, 12, 12, -12, -16, -12)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -12, 12, -12, -12, 16, -12)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w6c8t"]
texture = ExtResource("1")
margins = Vector2i(32, 32)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_05nbk"]
texture = ExtResource("1")
margins = Vector2i(160, 64)
texture_region_size = Vector2i(96, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 16, -48, -16, -20, -16, -20, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(48, 16, 48, -16, 20, -16.5, 20, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -32, 16, -4, 16, -4, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 16, 4, 16, 4, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-32, 16, -32, -16, -4, -16, -4, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(32, 16, 32, -16, 4, -16, 4, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -32, 16, -4, 16, -4, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 16, 4, 16, 4, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ee0gv"]
texture = ExtResource("1")
margins = Vector2i(32, 64)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 16, -12, 16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -16, -12, -16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 16, 12, 16, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -16, 12, -16, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 16, -12, 16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -16, -12, -16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 16, 12, 16, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -16, 12, -16, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lnu6d"]
texture = ExtResource("1")
margins = Vector2i(96, 96)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8javq"]
texture = ExtResource("1")
margins = Vector2i(128, 96)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8pchj"]
texture = ExtResource("1")
margins = Vector2i(128, 64)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s315k"]
texture = ExtResource("1")
margins = Vector2i(128, 32)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cnnsu"]
texture = ExtResource("1")
margins = Vector2i(128, 0)
texture_region_size = Vector2i(32, 32)
0:0/next_alternative_id = 8
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
0:0/1 = 1
0:0/1/flip_h = true
0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/1/physics_layer_0/angular_velocity = 0.0
0:0/2 = 2
0:0/2/flip_v = true
0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/2/physics_layer_0/angular_velocity = 0.0
0:0/3 = 3
0:0/3/flip_h = true
0:0/3/flip_v = true
0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/3/physics_layer_0/angular_velocity = 0.0
0:0/4 = 4
0:0/4/transpose = true
0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/4/physics_layer_0/angular_velocity = 0.0
0:0/5 = 5
0:0/5/flip_h = true
0:0/5/transpose = true
0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/5/physics_layer_0/angular_velocity = 0.0
0:0/6 = 6
0:0/6/flip_v = true
0:0/6/transpose = true
0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/6/physics_layer_0/angular_velocity = 0.0
0:0/7 = 7
0:0/7/flip_h = true
0:0/7/flip_v = true
0:0/7/transpose = true
0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/7/physics_layer_0/angular_velocity = 0.0
[resource]
tile_size = Vector2i(32, 32)
physics_layer_0/collision_layer = 1
sources/0 = SubResource("TileSetAtlasSource_va8am")
sources/1 = SubResource("TileSetAtlasSource_dri2i")
sources/2 = SubResource("TileSetAtlasSource_w6c8t")
sources/3 = SubResource("TileSetAtlasSource_05nbk")
sources/4 = SubResource("TileSetAtlasSource_ee0gv")
sources/5 = SubResource("TileSetAtlasSource_lnu6d")
sources/6 = SubResource("TileSetAtlasSource_8javq")
sources/7 = SubResource("TileSetAtlasSource_8pchj")
sources/8 = SubResource("TileSetAtlasSource_s315k")
sources/9 = SubResource("TileSetAtlasSource_cnnsu")
sources/10 = SubResource("TileSetAtlasSource_hfgct")
sources/11 = SubResource("TileSetAtlasSource_7xlxp")
sources/12 = SubResource("TileSetAtlasSource_64p8q")
sources/13 = SubResource("TileSetAtlasSource_bgjgk")
sources/14 = SubResource("TileSetAtlasSource_uq55q")
sources/15 = SubResource("TileSetAtlasSource_l5dh6")