From 8f6370f13dee9d86238fad7933def1aa949eac6d Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Sun, 25 Jun 2017 20:40:04 -0300 Subject: [PATCH] New pong demo that uses Godot as intended, erased old one. --- ....png-9a4ca347acb7532f6ae347744a6b04f7.stex | Bin 0 -> 140 bytes ....png-487276ed1e3a0c39cad0279d744ee560.stex | Bin 0 -> 996 bytes ....png-bc33611074a0f886142e37c77bd2545a.stex | Bin 0 -> 139 bytes ....png-fc6e4a6a7c8197834656482b94708e47.stex | Bin 0 -> 141 bytes ....png-f981c8489b9148e2e1dc63398273da74.stex | Bin 0 -> 140 bytes 2d/pong/ball.gd | 16 ++ {old/2d => 2d}/pong/ball.png | Bin 2d/pong/ball.png.import | 23 +++ 2d/pong/ceiling_floor.gd | 7 + {old/2d => 2d}/pong/icon.png | Bin 2d/pong/icon.png.import | 23 +++ {old/2d => 2d}/pong/left_pallete.png | Bin 2d/pong/left_pallete.png.import | 23 +++ 2d/pong/paddle.gd | 20 ++ 2d/pong/pong.tscn | 186 ++++++++++++++++++ 2d/pong/project.godot | 23 +++ {old/2d => 2d}/pong/right_pallete.png | Bin 2d/pong/right_pallete.png.import | 23 +++ {old/2d => 2d}/pong/separator.png | Bin 2d/pong/separator.png.import | 23 +++ 2d/pong/wall.gd | 8 + old/2d/pong/engine.cfg | 22 --- old/2d/pong/pong.gd | 67 ------- old/2d/pong/pong.tscn | 33 ---- 24 files changed, 375 insertions(+), 122 deletions(-) create mode 100644 2d/pong/.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex create mode 100644 2d/pong/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex create mode 100644 2d/pong/.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex create mode 100644 2d/pong/.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex create mode 100644 2d/pong/.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex create mode 100644 2d/pong/ball.gd rename {old/2d => 2d}/pong/ball.png (100%) create mode 100644 2d/pong/ball.png.import create mode 100644 2d/pong/ceiling_floor.gd rename {old/2d => 2d}/pong/icon.png (100%) create mode 100644 2d/pong/icon.png.import rename {old/2d => 2d}/pong/left_pallete.png (100%) create mode 100644 2d/pong/left_pallete.png.import create mode 100644 2d/pong/paddle.gd create mode 100644 2d/pong/pong.tscn create mode 100644 2d/pong/project.godot rename {old/2d => 2d}/pong/right_pallete.png (100%) create mode 100644 2d/pong/right_pallete.png.import rename {old/2d => 2d}/pong/separator.png (100%) create mode 100644 2d/pong/separator.png.import create mode 100644 2d/pong/wall.gd delete mode 100644 old/2d/pong/engine.cfg delete mode 100644 old/2d/pong/pong.gd delete mode 100644 old/2d/pong/pong.tscn diff --git a/2d/pong/.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex b/2d/pong/.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex new file mode 100644 index 0000000000000000000000000000000000000000..28237e14f8c85552a07dc9bcc4705ec98e06697d GIT binary patch literal 140 zcmZ>F2@c_4U|;}Y79eI|5MXBnk_A8<;ODN;2_$&Aq_}`wUQZ8~ARrA^&cOy`9pT^C z4Wx`cT^vIsrY`Mwvx137YRy@%>WB6T5&AM4 cW$%UgeA~^#G4B_*IZ!);r>mdKI;Vst06R4!hyVZp literal 0 HcmV?d00001 diff --git a/2d/pong/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex b/2d/pong/.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex new file mode 100644 index 0000000000000000000000000000000000000000..8329455545a36bdcf6df1ede5b22a320df3506d5 GIT binary patch literal 996 zcmV$&rTXq6vjV_=pay0amW;H{L??i z#Kc4;O6$&@kKo4FaK$tD25wyFq6_2BmDr%Ek&TJc8j&>CX3~YJh+?%)7Yt(uJ2h~x z`9Oc>Cgx^5pB%n>=FXkt0$_kZSWy4~dZECOw`gDq|Gv3lN!xINZ`O9RTolVnQg6D9#Bm?x~F~myqzsg#`e>`{`++IHJ%J zP%F@Cz=*11L{(Yx7BmN>%^J}ERBM1?#&?mI5^W>Y=ytQDZP02!RMQaEG?u&tZ3$$y zwg3RVqoYD`M4=_%*Tn?@pwa6UiX#fG21J5Emb4980{S~T002LZj#&Q!0OAtR4-NnT z;l4hhIHJ%TP{`$2(l%%gcrg zXLXe&ZG+~3zCZu~a6m4GGzUC4UyML<0*tcn(}n+kQIGC%xY7jB98fwFltuXmFQ0cx z1kC|G=8^c}*_lwB5>5#yQF959O|=Q29f+LjI!<++C2v8i0iTwaS<*IWOW=ih5OQoD zjEGY05}-NY^y-QwZNs?+`29dMYM+~%E6z)JskxU*VXp>Wkvlsep9jiMYjnLhFM;&t zrj$6M&^km~8j899d3`Mh3P^eSe=NZG+|j z+0H#PtOugAw_$n*CB zJ0Ers2nW#puG^Z+9p{kU%>MKGS7T$cq=k`IiKo;l+g)HKzT$Xo(Bm6@a`1 zR13`kd2=i5GZP_7-8mpD`9QSv0p-0NeqegdljV%0cY`G=O#p2l(C+i0-E5SSiL31A z{_9B&c=GM?8;gr9X&by6VD<=Q$UQ=j=1{a+XhpD)%hg1?EUgA4mzG%4HvRwrEC-F& S?&~c80000F2@c_4U|>)HViq7~U=Uzu1d{nc9N_1!&QV|BhgLKNvM%PzSlA$VPRYES Znc-bIr?vZMK4qY822WQ%mvv4FO#pXs9zOs8 literal 0 HcmV?d00001 diff --git a/2d/pong/.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex b/2d/pong/.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex new file mode 100644 index 0000000000000000000000000000000000000000..ecd28bb7dd18b56e823ed42c7bba068dd65a5da4 GIT binary patch literal 141 zcmZ>F2@c_4U|>)HViq7~U=Uzu1d@e79N_1!&F2@YXmU|^WQ$iTn?q!}0l*nv!j0w50Xb64mD61-eeTtF_br-w@rkOnGeoWQ{b zWVPgPyaA+)JzX3_JUZW=G8AM`;9)t)f9O#>AD@$RGi%!VJvVRN^_(;{`s|rK?THd? d5cKn$%ui2w@$!|@6M@CAt6r literal 0 HcmV?d00001 diff --git a/2d/pong/ball.gd b/2d/pong/ball.gd new file mode 100644 index 00000000..0d23ad9e --- /dev/null +++ b/2d/pong/ball.gd @@ -0,0 +1,16 @@ +extends Area2D + +const BALL_SPEED = 100 +var direction = Vector2(-1,0) +var speed = BALL_SPEED + +onready var initial_pos = get_position() + +func reset(): + position = initial_pos + speed = BALL_SPEED + direction = Vector2(-1,0) + +func _process(delta): + position += direction * speed * delta + \ No newline at end of file diff --git a/old/2d/pong/ball.png b/2d/pong/ball.png similarity index 100% rename from old/2d/pong/ball.png rename to 2d/pong/ball.png diff --git a/2d/pong/ball.png.import b/2d/pong/ball.png.import new file mode 100644 index 00000000..110a99ab --- /dev/null +++ b/2d/pong/ball.png.import @@ -0,0 +1,23 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/ball.png-9a4ca347acb7532f6ae347744a6b04f7.stex" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true diff --git a/2d/pong/ceiling_floor.gd b/2d/pong/ceiling_floor.gd new file mode 100644 index 00000000..52502915 --- /dev/null +++ b/2d/pong/ceiling_floor.gd @@ -0,0 +1,7 @@ +extends Area2D + +export var y_direction = 1 + +func _on_area_entered( area ): + if (area.get_name()=="ball"): + area.direction.y = y_direction diff --git a/old/2d/pong/icon.png b/2d/pong/icon.png similarity index 100% rename from old/2d/pong/icon.png rename to 2d/pong/icon.png diff --git a/2d/pong/icon.png.import b/2d/pong/icon.png.import new file mode 100644 index 00000000..627820bd --- /dev/null +++ b/2d/pong/icon.png.import @@ -0,0 +1,23 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true diff --git a/old/2d/pong/left_pallete.png b/2d/pong/left_pallete.png similarity index 100% rename from old/2d/pong/left_pallete.png rename to 2d/pong/left_pallete.png diff --git a/2d/pong/left_pallete.png.import b/2d/pong/left_pallete.png.import new file mode 100644 index 00000000..1507466d --- /dev/null +++ b/2d/pong/left_pallete.png.import @@ -0,0 +1,23 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/left_pallete.png-bc33611074a0f886142e37c77bd2545a.stex" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true diff --git a/2d/pong/paddle.gd b/2d/pong/paddle.gd new file mode 100644 index 00000000..ffa9bc14 --- /dev/null +++ b/2d/pong/paddle.gd @@ -0,0 +1,20 @@ +extends Area2D +export var ball_dir=1 + +const MOVE_SPEED=100 + +func _process(delta): + + var which = get_name() + + # move up and down based on input + if (Input.is_action_pressed(which+"_move_up") and position.y > 0): + position.y -= MOVE_SPEED * delta + if (Input.is_action_pressed(which+"_move_down") and position.y < 640): + position.y += MOVE_SPEED * delta + + +func _on_area_entered( area ): + if area.get_name() == "ball": + # assign new direction + area.direction = Vector2(ball_dir,randf() * 2 - 1).normalized() diff --git a/2d/pong/pong.tscn b/2d/pong/pong.tscn new file mode 100644 index 00000000..cda1d080 --- /dev/null +++ b/2d/pong/pong.tscn @@ -0,0 +1,186 @@ +[gd_scene load_steps=13 format=2] + +[ext_resource path="res://paddle.gd" type="Script" id=1] +[ext_resource path="res://left_pallete.png" type="Texture" id=2] +[ext_resource path="res://right_pallete.png" type="Texture" id=3] +[ext_resource path="res://ball.gd" type="Script" id=4] +[ext_resource path="res://ball.png" type="Texture" id=5] +[ext_resource path="res://separator.png" type="Texture" id=6] +[ext_resource path="res://wall.gd" type="Script" id=7] +[ext_resource path="res://ceiling_floor.gd" type="Script" id=8] + +[sub_resource type="RectangleShape2D" id=1] + +custom_solver_bias = 0.0 +extents = Vector2( 4, 16 ) + +[sub_resource type="RectangleShape2D" id=2] + +custom_solver_bias = 0.0 +extents = Vector2( 4, 4 ) + +[sub_resource type="RectangleShape2D" id=3] + +custom_solver_bias = 0.0 +extents = Vector2( 10, 200 ) + +[sub_resource type="RectangleShape2D" id=4] + +custom_solver_bias = 0.0 +extents = Vector2( 320, 10 ) + +[node name="game" type="Node2D"] + +[node name="left" type="Area2D" parent="."] + +position = Vector2( 67.6285, 192.594 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 1 ) +ball_dir = 1 + +[node name="sprite" type="Sprite" parent="left"] + +texture = ExtResource( 2 ) +_sections_unfolded = [ "Transform" ] + +[node name="collision" type="CollisionShape2D" parent="left"] + +shape = SubResource( 1 ) + +[node name="right" type="Area2D" parent="."] + +position = Vector2( 563.815, 188.919 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 1 ) +ball_dir = -1 + +[node name="sprite" type="Sprite" parent="right"] + +texture = ExtResource( 3 ) +_sections_unfolded = [ "Transform" ] + +[node name="collision" type="CollisionShape2D" parent="right"] + +shape = SubResource( 1 ) + +[node name="ball" type="Area2D" parent="."] + +position = Vector2( 320.5, 191.124 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 4 ) + +[node name="sprite" type="Sprite" parent="ball"] + +texture = ExtResource( 5 ) +_sections_unfolded = [ "Transform" ] + +[node name="collision" type="CollisionShape2D" parent="ball"] + +shape = SubResource( 2 ) + +[node name="separator" type="Sprite" parent="."] + +position = Vector2( 320, 200 ) +texture = ExtResource( 6 ) + +[node name="left_wall" type="Area2D" parent="."] + +position = Vector2( -10, 200 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 7 ) +_sections_unfolded = [ "Transform" ] + +[node name="collision" type="CollisionShape2D" parent="left_wall"] + +shape = SubResource( 3 ) + +[node name="right_wall" type="Area2D" parent="."] + +position = Vector2( 650, 200 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 7 ) +_sections_unfolded = [ "Transform" ] + +[node name="collision" type="CollisionShape2D" parent="right_wall"] + +shape = SubResource( 3 ) + +[node name="ceiling" type="Area2D" parent="."] + +position = Vector2( 320, -10 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 8 ) +_sections_unfolded = [ "Transform" ] +y_direction = 1 + +[node name="collision" type="CollisionShape2D" parent="ceiling"] + +shape = SubResource( 4 ) + +[node name="floor" type="Area2D" parent="."] + +position = Vector2( 320, 410 ) +input_pickable = true +gravity_vec = Vector2( 0, 1 ) +gravity = 98.0 +linear_damp = 0.1 +angular_damp = 1.0 +audio_bus_override = false +audio_bus_name = "Master" +script = ExtResource( 8 ) +_sections_unfolded = [ "Transform" ] +y_direction = -1 + +[node name="collision" type="CollisionShape2D" parent="floor"] + +shape = SubResource( 4 ) + +[connection signal="area_entered" from="left" to="left" method="_on_area_entered"] + +[connection signal="area_entered" from="right" to="right" method="_on_area_entered"] + +[connection signal="area_entered" from="left_wall" to="left_wall" method="_on_wall_area_entered"] + +[connection signal="area_entered" from="right_wall" to="right_wall" method="_on_wall_area_entered"] + +[connection signal="area_entered" from="ceiling" to="ceiling" method="_on_area_entered"] + +[connection signal="area_entered" from="floor" to="floor" method="_on_area_entered"] + + diff --git a/2d/pong/project.godot b/2d/pong/project.godot new file mode 100644 index 00000000..58656f83 --- /dev/null +++ b/2d/pong/project.godot @@ -0,0 +1,23 @@ +[application] + +icon = "res://icon.png" +main_scene = "pong.tscn" +name = "Pong" + +[display] + +stretch_2d = true +window/height = 400 +window/width = 640 + +[input] + +left_move_down = [ InputEvent(KEY,90) ] +left_move_up = [ InputEvent(KEY,65) ] +right_move_down = [ InputEvent(KEY,16777234) ] +right_move_up = [ InputEvent(KEY,16777232) ] + +[rendering] + +viewport/default_clear_color = Color( 0, 0, 0, 1 ) + diff --git a/old/2d/pong/right_pallete.png b/2d/pong/right_pallete.png similarity index 100% rename from old/2d/pong/right_pallete.png rename to 2d/pong/right_pallete.png diff --git a/2d/pong/right_pallete.png.import b/2d/pong/right_pallete.png.import new file mode 100644 index 00000000..e1ee6687 --- /dev/null +++ b/2d/pong/right_pallete.png.import @@ -0,0 +1,23 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/right_pallete.png-fc6e4a6a7c8197834656482b94708e47.stex" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true diff --git a/old/2d/pong/separator.png b/2d/pong/separator.png similarity index 100% rename from old/2d/pong/separator.png rename to 2d/pong/separator.png diff --git a/2d/pong/separator.png.import b/2d/pong/separator.png.import new file mode 100644 index 00000000..01df17d9 --- /dev/null +++ b/2d/pong/separator.png.import @@ -0,0 +1,23 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/separator.png-f981c8489b9148e2e1dc63398273da74.stex" + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +stream=false +size_limit=0 +detect_3d=true diff --git a/2d/pong/wall.gd b/2d/pong/wall.gd new file mode 100644 index 00000000..6adac9da --- /dev/null +++ b/2d/pong/wall.gd @@ -0,0 +1,8 @@ +extends Area2D + + + +func _on_wall_area_entered( area ): + if (area.get_name() == "ball"): + #oops, ball went out of game place, reset + area.reset() diff --git a/old/2d/pong/engine.cfg b/old/2d/pong/engine.cfg deleted file mode 100644 index 418f02c0..00000000 --- a/old/2d/pong/engine.cfg +++ /dev/null @@ -1,22 +0,0 @@ -[application] - -name="Pong" -main_scene="pong.tscn" -icon="res://icon.png" - -[display] - -width=640 -height=400 -stretch_2d=true - -[input] - -left_move_up=[key(A)] -left_move_down=[key(Z)] -right_move_up=[key(Up)] -right_move_down=[key(Down)] - -[render] - -default_clear_color=#ff000000 diff --git a/old/2d/pong/pong.gd b/old/2d/pong/pong.gd deleted file mode 100644 index 81afbd99..00000000 --- a/old/2d/pong/pong.gd +++ /dev/null @@ -1,67 +0,0 @@ - -extends Node2D - -# Member variables -const INITIAL_BALL_SPEED = 80 -var ball_speed = INITIAL_BALL_SPEED -var screen_size = Vector2(640, 400) - -# Default ball direction -var direction = Vector2(-1, 0) -var pad_size = Vector2(8, 32) -const PAD_SPEED = 150 - - -func _process(delta): - # Get ball position and pad rectangles - var ball_pos = get_node("ball").get_pos() - var left_rect = Rect2(get_node("left").get_pos() - pad_size*0.5, pad_size) - var right_rect = Rect2(get_node("right").get_pos() - pad_size*0.5, pad_size) - - # Integrate new ball postion - ball_pos += direction*ball_speed*delta - - # Flip when touching roof or floor - if ((ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0)): - direction.y = -direction.y - - # Flip, change direction and increase speed when touching pads - if ((left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)): - direction.x = -direction.x - ball_speed *= 1.1 - direction.y = randf()*2.0 - 1 - direction = direction.normalized() - - # Check gameover - if (ball_pos.x < 0 or ball_pos.x > screen_size.x): - ball_pos = screen_size*0.5 - ball_speed = INITIAL_BALL_SPEED - direction = Vector2(-1, 0) - - get_node("ball").set_pos(ball_pos) - - # Move left pad - var left_pos = get_node("left").get_pos() - - if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")): - left_pos.y += -PAD_SPEED*delta - if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")): - left_pos.y += PAD_SPEED*delta - - get_node("left").set_pos(left_pos) - - # Move right pad - var right_pos = get_node("right").get_pos() - - if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")): - right_pos.y += -PAD_SPEED*delta - if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")): - right_pos.y += PAD_SPEED*delta - - get_node("right").set_pos(right_pos) - - -func _ready(): - screen_size = get_viewport_rect().size # Get actual size - pad_size = get_node("left").get_texture().get_size() - set_process(true) diff --git a/old/2d/pong/pong.tscn b/old/2d/pong/pong.tscn deleted file mode 100644 index 95aecc60..00000000 --- a/old/2d/pong/pong.tscn +++ /dev/null @@ -1,33 +0,0 @@ -[gd_scene load_steps=6 format=1] - -[ext_resource path="res://pong.gd" type="Script" id=1] -[ext_resource path="res://left_pallete.png" type="Texture" id=2] -[ext_resource path="res://right_pallete.png" type="Texture" id=3] -[ext_resource path="res://separator.png" type="Texture" id=4] -[ext_resource path="res://ball.png" type="Texture" id=5] - -[node name="game" type="Node2D"] - -script/script = ExtResource( 1 ) - -[node name="left" type="Sprite" parent="."] - -transform/pos = Vector2( 67.6875, 183.208 ) -texture = ExtResource( 2 ) - -[node name="right" type="Sprite" parent="."] - -transform/pos = Vector2( 577, 187 ) -texture = ExtResource( 3 ) - -[node name="separator" type="Sprite" parent="."] - -transform/pos = Vector2( 320, 200 ) -texture = ExtResource( 4 ) - -[node name="ball" type="Sprite" parent="."] - -transform/pos = Vector2( 320.283, 188 ) -texture = ExtResource( 5 ) - -