Procházet zdrojové kódy

Merge pull request #865 from jtnicholl/physics_platformer

Update 2D physics platformer for 4.0
Rémi Verschelde před 2 roky
rodič
revize
c34e3f33c6
45 změnil soubory, kde provedl 1241 přidání a 757 odebrání
  1. 4 4
      2d/physics_platformer/README.md
  2. 0 52
      2d/physics_platformer/Stage.tscn
  3. 0 349
      2d/physics_platformer/Tileset.tres
  4. 0 35
      2d/physics_platformer/background/Seesaw.tscn
  5. 0 0
      2d/physics_platformer/background/parallax_bg.tscn
  6. 1 1
      2d/physics_platformer/background/plank.png.import
  7. 1 1
      2d/physics_platformer/background/plankpin.png.import
  8. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_1.png.import
  9. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_2.png.import
  10. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_3.png.import
  11. 1 1
      2d/physics_platformer/background/scroll_bg_fg_1.png.import
  12. 1 1
      2d/physics_platformer/background/scroll_bg_fg_2.png.import
  13. 1 1
      2d/physics_platformer/background/scroll_bg_sky.png.import
  14. 35 0
      2d/physics_platformer/background/seesaw.tscn
  15. 1 1
      2d/physics_platformer/coin/coin.png.import
  16. 0 0
      2d/physics_platformer/coin/coin.tscn
  17. 35 35
      2d/physics_platformer/enemy/enemy.gd
  18. 1 1
      2d/physics_platformer/enemy/enemy.png.import
  19. 85 59
      2d/physics_platformer/enemy/enemy.tscn
  20. binární
      2d/physics_platformer/icon.png
  21. binární
      2d/physics_platformer/icon.webp
  22. 5 5
      2d/physics_platformer/icon.webp.import
  23. 0 16
      2d/physics_platformer/platform/MovingPlatform.tscn
  24. 0 16
      2d/physics_platformer/platform/OneWayPlatform.tscn
  25. 0 17
      2d/physics_platformer/platform/moving_platform.gd
  26. 1 1
      2d/physics_platformer/platform/moving_platform.png.import
  27. 11 0
      2d/physics_platformer/platform/moving_platform.tscn
  28. 1 1
      2d/physics_platformer/platform/one_way_platform.png.import
  29. 16 0
      2d/physics_platformer/platform/one_way_platform.tscn
  30. 1 1
      2d/physics_platformer/player/bullet.png.import
  31. 0 0
      2d/physics_platformer/player/bullet.tscn
  32. 1 1
      2d/physics_platformer/player/osb_fire.png.import
  33. 1 1
      2d/physics_platformer/player/osb_jump.png.import
  34. 1 1
      2d/physics_platformer/player/osb_left.png.import
  35. 1 1
      2d/physics_platformer/player/osb_right.png.import
  36. 75 97
      2d/physics_platformer/player/player.gd
  37. 6 4
      2d/physics_platformer/player/player.tscn
  38. binární
      2d/physics_platformer/player/player.webp
  39. 5 5
      2d/physics_platformer/player/player.webp.import
  40. binární
      2d/physics_platformer/player/robot_demo.png
  41. 11 45
      2d/physics_platformer/project.godot
  42. 137 0
      2d/physics_platformer/stage.tscn
  43. 1 1
      2d/physics_platformer/tiles_demo.png.import
  44. 798 0
      2d/physics_platformer/tileset.tres
  45. 0 0
      2d/physics_platformer/tileset_edit.tscn

+ 4 - 4
2d/physics_platformer/README.md

@@ -1,15 +1,15 @@
 # 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.
 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
 manual modification of the RigidDynamicBody velocity.
 
 Language: GDScript
 
-Renderer: GLES 2
+Renderer: Forward Plus
 
 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
 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
 (there is a see-saw, and you can even ride enemies).
 Because of this, all movement must be done in sync with

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 52
2d/physics_platformer/Stage.tscn


+ 0 - 349
2d/physics_platformer/Tileset.tres

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

+ 0 - 35
2d/physics_platformer/background/Seesaw.tscn

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

+ 0 - 0
2d/physics_platformer/background/ParallaxBg.tscn → 2d/physics_platformer/background/parallax_bg.tscn


+ 1 - 1
2d/physics_platformer/background/plank.png.import

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

+ 1 - 1
2d/physics_platformer/background/plankpin.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_1.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_2.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_3.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_fg_1.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_fg_2.png.import

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

+ 1 - 1
2d/physics_platformer/background/scroll_bg_sky.png.import

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

+ 35 - 0
2d/physics_platformer/background/seesaw.tscn

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

+ 1 - 1
2d/physics_platformer/coin/coin.png.import

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

+ 0 - 0
2d/physics_platformer/coin/Coin.tscn → 2d/physics_platformer/coin/coin.tscn


+ 35 - 35
2d/physics_platformer/enemy/enemy.gd

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

+ 1 - 1
2d/physics_platformer/enemy/enemy.png.import

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

+ 85 - 59
2d/physics_platformer/enemy/Enemy.tscn → 2d/physics_platformer/enemy/enemy.tscn

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

binární
2d/physics_platformer/icon.png


binární
2d/physics_platformer/icon.webp


+ 5 - 5
2d/physics_platformer/icon.png.import → 2d/physics_platformer/icon.webp.import

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

+ 0 - 16
2d/physics_platformer/platform/MovingPlatform.tscn

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

+ 0 - 16
2d/physics_platformer/platform/OneWayPlatform.tscn

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

+ 0 - 17
2d/physics_platformer/platform/moving_platform.gd

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

+ 1 - 1
2d/physics_platformer/platform/moving_platform.png.import

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

+ 11 - 0
2d/physics_platformer/platform/moving_platform.tscn

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

+ 1 - 1
2d/physics_platformer/platform/one_way_platform.png.import

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

+ 16 - 0
2d/physics_platformer/platform/one_way_platform.tscn

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

+ 1 - 1
2d/physics_platformer/player/bullet.png.import

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

+ 0 - 0
2d/physics_platformer/player/Bullet.tscn → 2d/physics_platformer/player/bullet.tscn


+ 1 - 1
2d/physics_platformer/player/osb_fire.png.import

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

+ 1 - 1
2d/physics_platformer/player/osb_jump.png.import

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

+ 1 - 1
2d/physics_platformer/player/osb_left.png.import

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

+ 1 - 1
2d/physics_platformer/player/osb_right.png.import

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

+ 75 - 97
2d/physics_platformer/player/player.gd

@@ -1,27 +1,5 @@
-class_name Player
-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.
+class_name Player extends RigidBody2D
+
 
 const WALK_ACCEL = 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_FLOOR_AIRBORNE_TIME = 0.15
 
-var anim = ""
-var siding_left = false
-var jumping = false
-var stopping_jump = false
-var shooting = false
+var anim := ""
+var siding_left := false
+var jumping := false
+var stopping_jump := false
+var shooting := false
+
+var floor_h_velocity: float = 0.0
 
-var floor_h_velocity = 0.0
+var airborne_time: float = 1e20
+var shoot_time: float = 1e20
 
-var airborne_time = 1e20
-var shoot_time = 1e20
+var Bullet := preload("res://player/bullet.tscn")
+var Enemy := preload("res://enemy/enemy.tscn")
 
-var Bullet = preload("res://player/Bullet.tscn")
-var Enemy = preload("res://enemy/Enemy.tscn")
+@onready var sound_jump := $SoundJump as AudioStreamPlayer2D
+@onready var sound_shoot := $SoundShoot as AudioStreamPlayer2D
+@onready var sprite := $Sprite2D as Sprite2D
+@onready var sprite_smoke := sprite.get_node(^"Smoke") as CPUParticles2D
+@onready var animation_player := $AnimationPlayer as AnimationPlayer
+@onready var bullet_shoot := $BulletShoot as Marker2D
 
-@onready var sound_jump = $SoundJump
-@onready var sound_shoot = $SoundShoot
-@onready var sprite = $Sprite2D
-@onready var sprite_smoke = sprite.get_node(^"Smoke")
-@onready var animation_player = $AnimationPlayer
-@onready var bullet_shoot = $BulletShoot
 
-func _integrate_forces(s):
-	var lv = s.get_linear_velocity()
-	var step = s.get_step()
+func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
+	var velocity := state.get_linear_velocity()
+	var step := state.get_step()
 
-	var new_anim = anim
-	var new_siding_left = siding_left
+	var new_anim := anim
+	var new_siding_left := siding_left
 
 	# Get player input.
-	var move_left = Input.is_action_pressed(&"move_left")
-	var move_right = Input.is_action_pressed(&"move_right")
-	var jump = Input.is_action_pressed(&"jump")
-	var shoot = Input.is_action_pressed(&"shoot")
-	var spawn = Input.is_action_pressed(&"spawn")
+	var move_left := Input.is_action_pressed(&"move_left")
+	var move_right := Input.is_action_pressed(&"move_right")
+	var jump := Input.is_action_pressed(&"jump")
+	var shoot := Input.is_action_pressed(&"shoot")
+	var spawn := Input.is_action_pressed(&"spawn")
 
 	if spawn:
-		call_deferred("_spawn_enemy_above")
+		_spawn_enemy_above.call_deferred()
 
 	# Deapply prev floor velocity.
-	lv.x -= floor_h_velocity
+	velocity.x -= floor_h_velocity
 	floor_h_velocity = 0.0
 
 	# Find the floor (a contact with upwards facing collision normal).
-	var found_floor = false
-	var floor_index = -1
+	var found_floor := false
+	var floor_index := -1
 
-	for x in range(s.get_contact_count()):
-		var ci = s.get_contact_local_normal(x)
+	for contact_index in state.get_contact_count():
+		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
-			floor_index = x
+			floor_index = contact_index
 
 	# A good idea when implementing characters of all kinds,
 	# compensates for physics imprecision, as well as human reaction delay.
 	if shoot and not shooting:
-		call_deferred("_shot_bullet")
+		_shot_bullet.call_deferred()
 	else:
 		shoot_time += step
 
@@ -98,49 +77,49 @@ func _integrate_forces(s):
 	else:
 		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.
 	if jumping:
-		if lv.y > 0:
+		if velocity.y > 0:
 			# Set off the jumping flag if going down.
 			jumping = false
 		elif not jump:
 			stopping_jump = true
 
 		if stopping_jump:
-			lv.y += STOP_JUMP_FORCE * step
+			velocity.y += STOP_JUMP_FORCE * step
 
 	if on_floor:
 		# Process logic when character is on floor.
 		if move_left and not move_right:
-			if lv.x > -WALK_MAX_VELOCITY:
-				lv.x -= WALK_ACCEL * step
+			if velocity.x > -WALK_MAX_VELOCITY:
+				velocity.x -= WALK_ACCEL * step
 		elif move_right and not move_left:
-			if lv.x < WALK_MAX_VELOCITY:
-				lv.x += WALK_ACCEL * step
+			if velocity.x < WALK_MAX_VELOCITY:
+				velocity.x += WALK_ACCEL * step
 		else:
-			var xv = abs(lv.x)
+			var xv := absf(velocity.x)
 			xv -= WALK_DEACCEL * step
 			if xv < 0:
 				xv = 0
-			lv.x = sign(lv.x) * xv
+			velocity.x = signf(velocity.x) * xv
 
 		# Check jump.
 		if not jumping and jump:
-			lv.y = -JUMP_VELOCITY
+			velocity.y = -JUMP_VELOCITY
 			jumping = true
 			stopping_jump = false
 			sound_jump.play()
 
 		# Check siding.
-		if lv.x < 0 and move_left:
+		if velocity.x < 0 and move_left:
 			new_siding_left = true
-		elif lv.x > 0 and move_right:
+		elif velocity.x > 0 and move_right:
 			new_siding_left = false
 		if jumping:
 			new_anim = "jumping"
-		elif abs(lv.x) < 0.1:
+		elif absf(velocity.x) < 0.1:
 			if shoot_time < MAX_SHOOT_POSE_TIME:
 				new_anim = "idle_weapon"
 			else:
@@ -153,20 +132,20 @@ func _integrate_forces(s):
 	else:
 		# Process logic when the character is in the air.
 		if move_left and not move_right:
-			if lv.x > -WALK_MAX_VELOCITY:
-				lv.x -= AIR_ACCEL * step
+			if velocity.x > -WALK_MAX_VELOCITY:
+				velocity.x -= AIR_ACCEL * step
 		elif move_right and not move_left:
-			if lv.x < WALK_MAX_VELOCITY:
-				lv.x += AIR_ACCEL * step
+			if velocity.x < WALK_MAX_VELOCITY:
+				velocity.x += AIR_ACCEL * step
 		else:
-			var xv = abs(lv.x)
+			var xv := absf(velocity.x)
 			xv -= AIR_DEACCEL * step
 
 			if 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:
 				new_anim = "jumping_weapon"
 			else:
@@ -195,36 +174,35 @@ func _integrate_forces(s):
 
 	# Apply floor velocity.
 	if found_floor:
-		floor_h_velocity = s.get_contact_collider_velocity_at_position(floor_index).x
-		lv.x += floor_h_velocity
+		floor_h_velocity = state.get_contact_collider_velocity_at_position(floor_index).x
+		velocity.x += floor_h_velocity
 
 	# Finally, apply gravity and set back the linear velocity.
-	lv += s.get_total_gravity() * step
-	s.set_linear_velocity(lv)
+	velocity += state.get_total_gravity() * step
+	state.set_linear_velocity(velocity)
 
 
-func _shot_bullet():
+func _shot_bullet() -> void:
 	shoot_time = 0
-	var bi = Bullet.instantiate()
-	var ss
+	var bullet := Bullet.instantiate() as RigidBody2D
+	var speed_scale: float
 	if siding_left:
-		ss = -1.0
+		speed_scale = -1.0
 	else:
-		ss = 1.0
-	var pos = position + bullet_shoot.position * Vector2(ss, 1.0)
+		speed_scale = 1.0
 
-	bi.position = pos
-	get_parent().add_child(bi)
+	bullet.position = self.position + bullet_shoot.position * Vector2(speed_scale, 1.0)
+	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()
 	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():
-	var e = Enemy.instantiate()
-	e.position = position + 50 * Vector2.UP
-	get_parent().add_child(e)
+func _spawn_enemy_above() -> void:
+	var enemy := Enemy.instantiate() as RigidBody2D
+	enemy.position = self.position + 50 * Vector2.UP
+	get_parent().add_child(enemy)

+ 6 - 4
2d/physics_platformer/player/Player.tscn → 2d/physics_platformer/player/player.tscn

@@ -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="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="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"]
@@ -194,10 +194,13 @@ length = 18.0
 mass = 1.5
 physics_material_override = SubResource("1")
 custom_integrator = true
+max_contacts_reported = 4
+contact_monitor = true
+lock_rotation = true
 script = ExtResource("1")
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource("2")
+texture = ExtResource("2_675nc")
 hframes = 16
 vframes = 2
 
@@ -220,7 +223,6 @@ libraries = {
 }
 
 [node name="Camera2D" type="Camera2D" parent="."]
-current = true
 zoom = Vector2(2, 2)
 limit_left = 0
 limit_top = 0

binární
2d/physics_platformer/player/player.webp


+ 5 - 5
2d/physics_platformer/player/robot_demo.png.import → 2d/physics_platformer/player/player.webp.import

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

binární
2d/physics_platformer/player/robot_demo.png


+ 11 - 45
2d/physics_platformer/project.godot

@@ -8,40 +8,6 @@
 
 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]
 
 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,
 but can be more difficult to handle, as they require
 manual modification of the RigidDynamicBody3D velocity."
-run/main_scene="res://Stage.tscn"
+run/main_scene="res://stage.tscn"
 config/features=PackedStringArray("4.0")
-config/icon="res://icon.png"
+config/icon="res://icon.webp"
 
 [debug]
 
@@ -95,39 +61,39 @@ texture={
 
 jump={
 "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(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={
 "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(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)
 ]
 }
 move_right={
 "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(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)
 ]
 }
 shoot={
 "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(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(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={
 "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)
 ]
 }

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 137 - 0
2d/physics_platformer/stage.tscn


+ 1 - 1
2d/physics_platformer/tiles_demo.png.import

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

+ 798 - 0
2d/physics_platformer/tileset.tres

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

+ 0 - 0
2d/physics_platformer/TilesetEdit.tscn → 2d/physics_platformer/tileset_edit.tscn


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů