From 71eeb3f1d1bbdfe93746c571e0b5168b814f69e6 Mon Sep 17 00:00:00 2001 From: MaddoScientisto Date: Sun, 9 Jun 2024 00:34:36 +0200 Subject: [PATCH] Exploding barrels --- Scenes/Barrel.cs | 48 ++++++++++++++++++++++++++ Scenes/Barrel.tscn | 19 ++++++++-- Scenes/Furniture/LargeTank.tscn | 5 ++- Scenes/Furniture/MediumLiquidTank.tscn | 9 +++-- Scenes/Furniture/MediumTank.tscn | 11 +++--- Scenes/Furniture/MediumTerminal.tscn | 10 +++--- Scenes/bullet.tscn | 3 +- Scenes/test.tscn | 9 +++++ Scripts/Bullet.cs | 28 +++++++++++---- Scripts/IDestructible.cs | 6 ++++ Sprites/boxes-sprites.aseprite | 3 ++ Sprites/chest_generic_red.aseprite | 3 ++ 12 files changed, 133 insertions(+), 21 deletions(-) create mode 100644 Scenes/Barrel.cs create mode 100644 Scripts/IDestructible.cs create mode 100644 Sprites/boxes-sprites.aseprite create mode 100644 Sprites/chest_generic_red.aseprite diff --git a/Scenes/Barrel.cs b/Scenes/Barrel.cs new file mode 100644 index 00000000..1e45f9f8 --- /dev/null +++ b/Scenes/Barrel.cs @@ -0,0 +1,48 @@ +using Godot; +using System; +using System.Diagnostics; + +public partial class Barrel : Area2D, IDestructible +{ + + [Export] + public float Health = 1f; + + [Export] + public float ExplosionRadius = 1; + + private float _currentHealth; + + private bool _isDestroyed = false; + + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + _currentHealth = Health; + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + } + + public void Explode() { + Debug.WriteLine("Boom"); + QueueFree(); + } + + public void Hit(float damage) + { + if (_isDestroyed) return; + _isDestroyed = true; + Explode(); + + // TODO: Change sprite + } + + public bool IsDestroyed() + { + return _isDestroyed; + } + +} diff --git a/Scenes/Barrel.tscn b/Scenes/Barrel.tscn index c388908f..b64fa115 100644 --- a/Scenes/Barrel.tscn +++ b/Scenes/Barrel.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://bj28qiai2x2ar"] +[gd_scene load_steps=6 format=3 uid="uid://bj28qiai2x2ar"] +[ext_resource type="Script" path="res://Scenes/Barrel.cs" id="1_avwdx"] [ext_resource type="Texture2D" uid="uid://d2f16ke8c7vwx" path="res://Sprites/Barrel.png" id="1_e66t6"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_2ewfl"] @@ -9,9 +10,13 @@ size = Vector2(11, 14) atlas = ExtResource("1_e66t6") region = Rect2(0, 0, 16, 16) -[node name="Barrel" type="Area2D"] +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ss2y0"] +size = Vector2(11, 14) + +[node name="Barrel" type="Area2D" groups=["Destroyable"]] collision_layer = 64 collision_mask = 10 +script = ExtResource("1_avwdx") metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="."] @@ -21,3 +26,13 @@ shape = SubResource("RectangleShape2D_2ewfl") [node name="Sprite2D" type="Sprite2D" parent="."] texture = SubResource("AtlasTexture_v7gy8") + +[node name="RigidBody2D" type="RigidBody2D" parent="."] +collision_layer = 64 +collision_mask = 10 +gravity_scale = 0.0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="RigidBody2D"] +visible = false +position = Vector2(0.5, -1) +shape = SubResource("RectangleShape2D_ss2y0") diff --git a/Scenes/Furniture/LargeTank.tscn b/Scenes/Furniture/LargeTank.tscn index ebbd217f..39b9953c 100644 --- a/Scenes/Furniture/LargeTank.tscn +++ b/Scenes/Furniture/LargeTank.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://uaf5r6cd71hu"] +[gd_scene load_steps=5 format=3 uid="uid://uaf5r6cd71hu"] +[ext_resource type="Script" path="res://Scenes/Barrel.cs" id="1_7ckvo"] [ext_resource type="Texture2D" uid="uid://d2rvjbllnogx4" path="res://Sprites/LargeTank.png" id="1_7h6ee"] [sub_resource type="AtlasTexture" id="AtlasTexture_i3nxh"] @@ -12,6 +13,8 @@ size = Vector2(61, 61) [node name="LargeTank" type="Area2D"] collision_layer = 65 collision_mask = 11 +script = ExtResource("1_7ckvo") +Health = 4.0 [node name="Sprite2D" type="Sprite2D" parent="."] texture = SubResource("AtlasTexture_i3nxh") diff --git a/Scenes/Furniture/MediumLiquidTank.tscn b/Scenes/Furniture/MediumLiquidTank.tscn index 8b529c9d..ed780ea3 100644 --- a/Scenes/Furniture/MediumLiquidTank.tscn +++ b/Scenes/Furniture/MediumLiquidTank.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://7cpk3c3d8cl7"] +[gd_scene load_steps=5 format=3 uid="uid://7cpk3c3d8cl7"] +[ext_resource type="Script" path="res://Scenes/Barrel.cs" id="1_laidj"] [ext_resource type="Texture2D" uid="uid://dqx1di84tkfft" path="res://Sprites/MediumLiquidTanks.png" id="1_mv1jg"] [sub_resource type="AtlasTexture" id="AtlasTexture_i3nxh"] @@ -10,8 +11,10 @@ region = Rect2(64, 96, 32, 32) size = Vector2(28, 24) [node name="LargeTank" type="Area2D"] -collision_layer = 65 -collision_mask = 11 +collision_layer = 64 +collision_mask = 10 +script = ExtResource("1_laidj") +Health = 2.0 metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] diff --git a/Scenes/Furniture/MediumTank.tscn b/Scenes/Furniture/MediumTank.tscn index c3012c43..d0e57bc1 100644 --- a/Scenes/Furniture/MediumTank.tscn +++ b/Scenes/Furniture/MediumTank.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://crmwuwhltmdq7"] +[gd_scene load_steps=5 format=3 uid="uid://crmwuwhltmdq7"] +[ext_resource type="Script" path="res://Scenes/Barrel.cs" id="1_c66eg"] [ext_resource type="Texture2D" uid="uid://b80wf43ow5d8b" path="res://Sprites/MediumTank.png" id="1_y64dw"] [sub_resource type="AtlasTexture" id="AtlasTexture_i3nxh"] @@ -9,9 +10,11 @@ region = Rect2(0, 0, 64, 64) [sub_resource type="RectangleShape2D" id="RectangleShape2D_0nhpj"] size = Vector2(30, 28) -[node name="LargeTank" type="Area2D"] -collision_layer = 65 -collision_mask = 11 +[node name="LargeTank" type="Area2D" groups=["Destroyable"]] +collision_layer = 64 +collision_mask = 10 +script = ExtResource("1_c66eg") +Health = 2.0 [node name="Sprite2D" type="Sprite2D" parent="."] texture = SubResource("AtlasTexture_i3nxh") diff --git a/Scenes/Furniture/MediumTerminal.tscn b/Scenes/Furniture/MediumTerminal.tscn index add5f603..e1600fc9 100644 --- a/Scenes/Furniture/MediumTerminal.tscn +++ b/Scenes/Furniture/MediumTerminal.tscn @@ -1,5 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://bnhck5eh0tqxf"] +[gd_scene load_steps=5 format=3 uid="uid://bnhck5eh0tqxf"] +[ext_resource type="Script" path="res://Scenes/Barrel.cs" id="1_iba8l"] [ext_resource type="Texture2D" uid="uid://juyup7so2u4g" path="res://Sprites/MediumTerminals.png" id="1_sgrg1"] [sub_resource type="AtlasTexture" id="AtlasTexture_i3nxh"] @@ -9,9 +10,10 @@ region = Rect2(96, 0, 32, 32) [sub_resource type="RectangleShape2D" id="RectangleShape2D_0nhpj"] size = Vector2(28, 24) -[node name="LargeTank" type="Area2D"] -collision_layer = 65 -collision_mask = 11 +[node name="LargeTank" type="Area2D" groups=["Destroyable"]] +collision_layer = 64 +collision_mask = 10 +script = ExtResource("1_iba8l") metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] diff --git a/Scenes/bullet.tscn b/Scenes/bullet.tscn index d8a6c07f..406565f9 100644 --- a/Scenes/bullet.tscn +++ b/Scenes/bullet.tscn @@ -8,7 +8,7 @@ radius = 2.23607 [node name="Bullet" type="Area2D" groups=["bullets"]] collision_layer = 8 -collision_mask = 21 +collision_mask = 85 script = ExtResource("1_jvxw3") Speed = 200.0 metadata/_edit_group_ = true @@ -24,5 +24,6 @@ editor_description = "Player Bullet" [node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] +[connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 41abf9f5..7b11e678 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -6950,6 +6950,15 @@ layer_2/tile_data = PackedInt32Array(-852021, 131072, 6, -786485, 131072, 6, -72 [node name="Barrel" parent="Factory Tilemaps/Solid" instance=ExtResource("5_3uba3")] position = Vector2(-751, -166) +Health = 2.0 + +[node name="Barrel2" parent="Factory Tilemaps/Solid" instance=ExtResource("5_3uba3")] +position = Vector2(-615, -103) +Health = 2.0 + +[node name="Barrel3" parent="Factory Tilemaps/Solid" instance=ExtResource("5_3uba3")] +position = Vector2(-631, -103) +Health = 2.0 [node name="LargeTank" parent="Factory Tilemaps/Solid" instance=ExtResource("6_nkauc")] position = Vector2(-639, 71) diff --git a/Scripts/Bullet.cs b/Scripts/Bullet.cs index 1e029e92..61ff0a5d 100644 --- a/Scripts/Bullet.cs +++ b/Scripts/Bullet.cs @@ -7,6 +7,9 @@ public partial class Bullet : Area2D [Export] public float Speed = 1900f; + [Export] + public float Damage = 1f; + private Vector2 _direction = Vector2.Right; //public delegate void BulletHitEventHandler(Node Body); @@ -53,15 +56,28 @@ public partial class Bullet : Area2D { if (body.IsInGroup("Solid")) { - Debug.WriteLine("Collision"); + //Debug.WriteLine("Collision"); + QueueFree(); + } + else if (body.IsInGroup("Destroyable")) + { + Debug.WriteLine("Collision with destroyable object body"); QueueFree(); } } + + private void _on_area_entered(Area2D area) + { + // Replace with function body. + if (area.IsInGroup("Destroyable") && area is IDestructible destructible) + { + //Debug.WriteLine("Collision with destroyable object area"); + + destructible.Hit(Damage); + + QueueFree(); + } + } } - - - - - diff --git a/Scripts/IDestructible.cs b/Scripts/IDestructible.cs new file mode 100644 index 00000000..74b9d5ea --- /dev/null +++ b/Scripts/IDestructible.cs @@ -0,0 +1,6 @@ + +public interface IDestructible +{ + public void Hit(float damage); + public bool IsDestroyed(); +} \ No newline at end of file diff --git a/Sprites/boxes-sprites.aseprite b/Sprites/boxes-sprites.aseprite new file mode 100644 index 00000000..cce7a939 --- /dev/null +++ b/Sprites/boxes-sprites.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25c266ac29f583b81464242fb7060ecc38fa01ed117071792e6bb1da5bd209fe +size 41244 diff --git a/Sprites/chest_generic_red.aseprite b/Sprites/chest_generic_red.aseprite new file mode 100644 index 00000000..8f5cea9b --- /dev/null +++ b/Sprites/chest_generic_red.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02176ded197f7e695889355c1ba3130b3de5049bc90f799d7b6c0fbcbcbe5c46 +size 545