diff --git a/Scenes/Ball.tscn b/Scenes/Ball.tscn
index 3d5bc88..766c7cf 100644
--- a/Scenes/Ball.tscn
+++ b/Scenes/Ball.tscn
@@ -1,6 +1,6 @@
-[gd_scene load_steps=4 format=3 uid="uid://cggi01qnnlnwg"]
+[gd_scene load_steps=4 format=3]
-[ext_resource type="Script" path="res://Scripts/Ball.cs" id="1_474si"]
+[ext_resource type="Script" path="res://Scripts/Nodes/Ball.cs" id="1_474si"]
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_yq7ub"]
size = Vector2(50, 50)
@@ -9,6 +9,7 @@ size = Vector2(50, 50)
size = Vector2(50, 50)
[node name="Ball" type="CharacterBody2D"]
+collision_mask = 3
script = ExtResource("1_474si")
[node name="Sprite2D" type="Sprite2D" parent="."]
diff --git a/Scenes/Enemy.tscn b/Scenes/Enemy.tscn
index f97d24b..031f189 100644
--- a/Scenes/Enemy.tscn
+++ b/Scenes/Enemy.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=5 format=3 uid="uid://krt6x241s3x6"]
+[gd_scene load_steps=5 format=3]
[ext_resource type="PhysicsMaterial" uid="uid://e05n66x8ug77" path="res://BouncyMaterial.tres" id="1_e3kk5"]
-[ext_resource type="Script" path="res://Scripts/Enemy.cs" id="1_fbrtv"]
+[ext_resource type="Script" path="res://Scripts/Nodes/Enemy.cs" id="1_fbrtv"]
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_iw3nx"]
size = Vector2(50, 75)
@@ -10,6 +10,7 @@ size = Vector2(50, 75)
size = Vector2(12, 150)
[node name="Enemy" type="RigidBody2D"]
+collision_mask = 3
physics_material_override = ExtResource("1_e3kk5")
gravity_scale = 0.0
lock_rotation = true
diff --git a/Scenes/Paddle.tscn b/Scenes/Paddle.tscn
index 0310304..6ab4142 100644
--- a/Scenes/Paddle.tscn
+++ b/Scenes/Paddle.tscn
@@ -1,7 +1,7 @@
-[gd_scene load_steps=5 format=3 uid="uid://bklo6torhapa0"]
+[gd_scene load_steps=5 format=3]
[ext_resource type="PhysicsMaterial" uid="uid://e05n66x8ug77" path="res://BouncyMaterial.tres" id="1_76uik"]
-[ext_resource type="Script" path="res://Scripts/Paddle.cs" id="1_uv7s3"]
+[ext_resource type="Script" path="res://Scripts/Nodes/Paddle.cs" id="1_uv7s3"]
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_iw3nx"]
size = Vector2(50, 75)
@@ -10,6 +10,7 @@ size = Vector2(50, 75)
size = Vector2(12, 150)
[node name="Paddle" type="RigidBody2D"]
+collision_mask = 3
physics_material_override = ExtResource("1_76uik")
gravity_scale = 0.0
lock_rotation = true
diff --git a/Scenes/Pong.tscn b/Scenes/Pong.tscn
index 73e9b48..6947216 100644
--- a/Scenes/Pong.tscn
+++ b/Scenes/Pong.tscn
@@ -1,10 +1,10 @@
-[gd_scene load_steps=6 format=3 uid="uid://kmfgtiugs4m0"]
+[gd_scene load_steps=6 format=3 uid="uid://wn48xnd0lstq"]
-[ext_resource type="PackedScene" uid="uid://bklo6torhapa0" path="res://Scenes/Paddle.tscn" id="1_5rs0o"]
-[ext_resource type="Script" path="res://Scripts/SceneManager.cs" id="1_m8437"]
-[ext_resource type="PackedScene" uid="uid://cggi01qnnlnwg" path="res://Scenes/Ball.tscn" id="2_u2ksv"]
-[ext_resource type="PackedScene" uid="uid://c5n541vsuvfk8" path="res://Scenes/Walls.tscn" id="3_jfis7"]
-[ext_resource type="PackedScene" uid="uid://krt6x241s3x6" path="res://Scenes/Enemy.tscn" id="4_uwvof"]
+[ext_resource type="PackedScene" path="res://Scenes/Paddle.tscn" id="1_5rs0o"]
+[ext_resource type="Script" path="res://Scripts/Managers/SceneManager.cs" id="1_m8437"]
+[ext_resource type="PackedScene" path="res://Scenes/Ball.tscn" id="2_u2ksv"]
+[ext_resource type="PackedScene" path="res://Scenes/Walls.tscn" id="3_jfis7"]
+[ext_resource type="PackedScene" path="res://Scenes/Enemy.tscn" id="4_uwvof"]
[node name="Pong" type="Node2D"]
script = ExtResource("1_m8437")
diff --git a/Scenes/Walls.tscn b/Scenes/Walls.tscn
index 28d72f5..dddf94e 100644
--- a/Scenes/Walls.tscn
+++ b/Scenes/Walls.tscn
@@ -1,6 +1,6 @@
-[gd_scene load_steps=8 format=3 uid="uid://c5n541vsuvfk8"]
+[gd_scene load_steps=8 format=3]
-[ext_resource type="Script" path="res://Scripts/WallManager.cs" id="1_mxer2"]
+[ext_resource type="Script" path="res://Scripts/Managers/WallManager.cs" id="1_mxer2"]
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_f7jy5"]
size = Vector2(30, 600)
@@ -48,6 +48,8 @@ shape = SubResource("RectangleShape2D_sip7s")
[node name="Top" type="StaticBody2D" parent="."]
position = Vector2(2.08165e-12, -287)
+collision_layer = 2
+collision_mask = 2
[node name="Top" type="Sprite2D" parent="Top"]
position = Vector2(2.08165e-12, 2.08165e-12)
@@ -59,6 +61,8 @@ shape = SubResource("RectangleShape2D_rw4mt")
[node name="Bottom" type="StaticBody2D" parent="."]
position = Vector2(2.08165e-12, 283)
+collision_layer = 2
+collision_mask = 2
[node name="Bottom" type="Sprite2D" parent="Bottom"]
position = Vector2(2.08165e-12, 2.08165e-12)
diff --git a/Scripts/SceneManager.cs b/Scripts/Managers/SceneManager.cs
similarity index 86%
rename from Scripts/SceneManager.cs
rename to Scripts/Managers/SceneManager.cs
index b0472c5..4565617 100644
--- a/Scripts/SceneManager.cs
+++ b/Scripts/Managers/SceneManager.cs
@@ -1,6 +1,6 @@
using Godot;
-namespace Pong.Scripts;
+namespace Pong.Scripts.Managers;
public partial class SceneManager : Node2D
{
diff --git a/Scripts/Managers/WallManager.cs b/Scripts/Managers/WallManager.cs
new file mode 100644
index 0000000..e843964
--- /dev/null
+++ b/Scripts/Managers/WallManager.cs
@@ -0,0 +1,29 @@
+using Godot;
+
+namespace Pong.Scripts.Managers;
+
+public partial class WallManager : Area2D
+{
+ public override void _Ready()
+ {
+ BodyEntered += OnBodyEntered;
+ }
+
+ private void OnBodyEntered(Node2D body)
+ {
+ if (body is not Nodes.Ball ball) return;
+ ResetBall(ball);
+ }
+
+ ///
+ /// reset the ball to the starting position and flick it again.
+ ///
+ /// a object that you want to reset.
+ private async void ResetBall(Nodes.Ball ball)
+ {
+ ball.Velocity = Vector2.Zero;
+ ball.Position = Vector2.Zero;
+ await ToSignal(GetTree().CreateTimer(0.25), "timeout");
+ ball.FlickBall();
+ }
+}
diff --git a/Scripts/Ball.cs b/Scripts/Nodes/Ball.cs
similarity index 72%
rename from Scripts/Ball.cs
rename to Scripts/Nodes/Ball.cs
index 78518bb..b90471c 100644
--- a/Scripts/Ball.cs
+++ b/Scripts/Nodes/Ball.cs
@@ -1,13 +1,11 @@
using Godot;
-namespace Pong.Scripts;
+namespace Pong.Scripts.Nodes;
public partial class Ball : CharacterBody2D
{
[Export] private double _ballSpeed;
[Export] private double _maxRandomAngle;
-
- private Vector2 _velocity;
///
/// this property multiples the ballSpeed by the Meter constant.
@@ -15,17 +13,25 @@ public partial class Ball : CharacterBody2D
private double BallSpeed => _ballSpeed * Constants.Meter;
public override void _Ready()
+ {
+ FlickBall();
+ }
+
+ ///
+ /// flick the ball in a direction.
+ ///
+ internal void FlickBall()
{
// this should dispose when this method goes out of scope (this means after the velocity variable is assigned)
using var rng = new RandomNumberGenerator();
rng.Randomize();
// set the velocity currently to the left of the screen with a random y angle.
- _velocity = GetRandomStartingDirection() * BallSpeed + new Vector2(0, rng.RandfRange(-_maxRandomAngle, _maxRandomAngle) * BallSpeed);
+ var randomAngle = new Vector2(0, rng.RandfRange(-_maxRandomAngle, _maxRandomAngle) * BallSpeed);
+ Velocity = GetRandomStartingDirection() * BallSpeed + randomAngle;
}
public override void _PhysicsProcess(double delta)
{
- Velocity = _velocity;
CollisionCheck(delta);
}
@@ -35,9 +41,9 @@ public partial class Ball : CharacterBody2D
/// delta time from the _PhysicsProcess method.
private void CollisionCheck(double delta)
{
- var collision = MoveAndCollide(_velocity * delta);
+ var collision = MoveAndCollide(Velocity * delta);
if (collision == null) return;
- _velocity = _velocity.Bounce(collision.GetNormal());
+ Velocity = Velocity.Bounce(collision.GetNormal());
}
///
@@ -45,12 +51,14 @@ public partial class Ball : CharacterBody2D
/// either returns Vector2.Left or Vector2.Right
/// based on that number.
///
- private static Vector2 GetRandomStartingDirection() {
+ private static Vector2 GetRandomStartingDirection()
+ {
using var rng = new RandomNumberGenerator();
rng.Randomize();
- var range = rng.RandiRange(0,1);
+ var range = rng.RandiRange(0, 1);
- if (range == 0) {
+ if (range == 0)
+ {
return Vector2.Left;
}
diff --git a/Scripts/Enemy.cs b/Scripts/Nodes/Enemy.cs
similarity index 92%
rename from Scripts/Enemy.cs
rename to Scripts/Nodes/Enemy.cs
index 5f5e2fd..db2671b 100644
--- a/Scripts/Enemy.cs
+++ b/Scripts/Nodes/Enemy.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using Godot;
using Godot.Collections;
-namespace Pong.Scripts;
+namespace Pong.Scripts.Nodes;
public partial class Enemy : RigidBody2D
{
@@ -36,9 +36,9 @@ public partial class Enemy : RigidBody2D
private void Scan(double delta)
{
- var spaceState = GetWorld2D().DirectSpaceState;
+ using var spaceState = GetWorld2D().DirectSpaceState;
- var query = new PhysicsShapeQueryParameters2D
+ using var query = new PhysicsShapeQueryParameters2D
{
Shape = new RectangleShape2D { Size = _scanArea.Size },
Exclude = new Array(new[] { GetRid() })
@@ -65,7 +65,7 @@ public partial class Enemy : RigidBody2D
private void TrackBall(double delta, IReadOnlyList result)
{
// checks if the collider is a ball, if not, return.
- if (result[0]["collider"].As() is not { } ball) return;
+ if (result[0]["collider"].As() is not { } ball) return;
// gets the sign of the distance between the ball and the paddle on the y axis
var normalisedDistance = new Vector2(0, Mathf.Sign(ball.Position.Y - Position.Y));
diff --git a/Scripts/Paddle.cs b/Scripts/Nodes/Paddle.cs
similarity index 96%
rename from Scripts/Paddle.cs
rename to Scripts/Nodes/Paddle.cs
index a2ff130..2893d2c 100644
--- a/Scripts/Paddle.cs
+++ b/Scripts/Nodes/Paddle.cs
@@ -1,6 +1,6 @@
using Godot;
-namespace Pong.Scripts;
+namespace Pong.Scripts.Nodes;
public partial class Paddle : RigidBody2D
{
diff --git a/Scripts/WallManager.cs b/Scripts/WallManager.cs
deleted file mode 100644
index 7736d0a..0000000
--- a/Scripts/WallManager.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using Godot;
-using System;
-
-public partial class WallManager : Area2D
-{
- // Called when the node enters the scene tree for the first time.
- public override void _Ready()
- {
-
- }
-
- // Called every frame. 'delta' is the elapsed time since the previous frame.
- public override void _Process(double delta)
- {
- }
-
-}
diff --git a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.arm64.so b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.arm64.so
index 52b2024..79a3b32 100755
--- a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.arm64.so
+++ b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.arm64.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:426f8b861429858307593e077b780e4496ba3eeeb183431a41773c0be4f6ed31
-size 8182112
+oid sha256:94a0c3fc43d950240e5c55682f6948f525c5df50fc7c5e020997b75f54c7d800
+size 8650504
diff --git a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.x86_64.so b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.x86_64.so
index 0123c58..c4d4087 100755
--- a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.x86_64.so
+++ b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.double.x86_64.so
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:46cd623b7c8baa5779e165e534a82d99a0288bf655c2fc6be92ad80db656fff1
-size 8781400
+oid sha256:a61b2305e1550d1cc7f4101f0c86918c48e53947107f786ee65dbf2decd2f32f
+size 15556080