diff --git a/Scenes/Barrel.cs b/Scenes/Barrel.cs index e37016b6..9a24d904 100644 --- a/Scenes/Barrel.cs +++ b/Scenes/Barrel.cs @@ -15,6 +15,8 @@ public partial class Barrel : Area2D, IDestructible [Export] public PackedScene ExplosionParticles { get; set; } + [Export] public PackedScene ExplosionScene { get; set; } + private float _currentHealth = 0f; private bool _isDestroyed = false; @@ -32,21 +34,61 @@ public partial class Barrel : Area2D, IDestructible private void Explode() { - Debug.WriteLine("Boom"); + //ApplyExplosionDamage(); + CreateExplosion(); CreateParticles(); CreateDebris(); QueueFree(); } + private void CreateExplosion() + { + if (ExplosionScene == null) return; + + var explosion = this.CreateSibling(ExplosionScene); + explosion.Speed = 0; + + } + + private void ApplyExplosionDamage() + { + var spaceState = GetWorld2D().DirectSpaceState; + var query = new PhysicsShapeQueryParameters2D(); + var shape = new CircleShape2D { Radius = ExplosionRadius }; + + query.SetShape(shape); + query.Transform = new Transform2D(0, GlobalPosition); + query.CollideWithBodies = false; + query.CollideWithAreas = true; + //query.CollisionMask = ; + + var results = spaceState.IntersectShape(query); + + GD.Print($"Shapes in range: {results.Count}"); + + foreach (var result in results) + { + if (result.TryGetValue("collider", out var colliderObj)) + { + + var collider = colliderObj.As(); + + + if (collider.GetParent() is IDestructible destructible) + { + GD.Print($"HITTING {collider.Name}"); + destructible.Hit(ExplosionDamage); + } + else { + GD.Print($"Collider {collider.Name} was not idestructible"); + } + } + } + } + private void CreateDebris() { this.CreateSibling(DebrisScene); - - // if (DebrisScene == null) return; - // var debris = DebrisScene.Instantiate(); - // Owner.CallDeferred("add_child", debris); //.AddChild(debris); - // debris.Transform = this.GlobalTransform; - // debris.Position = this.Position; } private void CreateParticles() @@ -59,32 +101,15 @@ public partial class Barrel : Area2D, IDestructible particle.Emitting = true; - // if (ExplosionParticles == null) return; - // var emitter = ExplosionParticles.Instantiate(); - // Owner.CallDeferred("add_child", emitter); - // emitter.Transform = this.GlobalTransform; - // emitter.Position = this.Position; - // - // emitter.Emitting = true; } - // private T CreateChild(PackedScene prefab) where T : Node2D - // { - // if (prefab == null) return null; - // var newInstance = prefab.Instantiate(); - // Owner.CallDeferred("add_child", newInstance); - // newInstance.Transform = this.GlobalTransform; - // newInstance.Position = this.Position; - // - // return newInstance; - // } public void Hit(float damage) { if (_isDestroyed) return; _currentHealth -= damage; - if (!(_currentHealth <= 0)) return; + if (_currentHealth > 0) return; _isDestroyed = true; Explode(); } diff --git a/Scenes/Props/Barrel.tscn b/Scenes/Props/Barrel.tscn index 41ed0c5c..0dd64ba9 100644 --- a/Scenes/Props/Barrel.tscn +++ b/Scenes/Props/Barrel.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=8 format=3 uid="uid://bj28qiai2x2ar"] +[gd_scene load_steps=9 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"] [ext_resource type="PackedScene" uid="uid://clyyl3jgpfoo7" path="res://Scenes/Props/Broken_Barrel.tscn" id="2_f145b"] [ext_resource type="PackedScene" uid="uid://jmijre3eaf8m" path="res://Scenes/Explosion.tscn" id="3_sm378"] +[ext_resource type="PackedScene" uid="uid://h11o0et1y54v" path="res://Scenes/Weapons/Bullets/explosion.tscn" id="4_epbro"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_2ewfl"] size = Vector2(11, 14) @@ -20,10 +21,11 @@ collision_layer = 64 collision_mask = 138 script = ExtResource("1_avwdx") Health = 2.0 -ExplosionRadius = 2.0 -ExplosionDamage = 2.0 +ExplosionRadius = 4.0 +ExplosionDamage = 3.0 DebrisScene = ExtResource("2_f145b") ExplosionParticles = ExtResource("3_sm378") +ExplosionScene = ExtResource("4_epbro") metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="."] diff --git a/Scenes/Weapons/Bullets/explosion.tscn b/Scenes/Weapons/Bullets/explosion.tscn new file mode 100644 index 00000000..5ed3e345 --- /dev/null +++ b/Scenes/Weapons/Bullets/explosion.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=4 format=3 uid="uid://h11o0et1y54v"] + +[ext_resource type="Script" path="res://Scripts/Bullet.cs" id="1_f0epf"] +[ext_resource type="Texture2D" uid="uid://b2bp03a70cpyd" path="res://Sprites/Explosion1.png" id="2_gmwb3"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_jxptd"] +radius = 12.0 + +[node name="Bullet" type="Area2D" groups=["bullets"]] +collision_layer = 136 +collision_mask = 87 +script = ExtResource("1_f0epf") +Speed = 0.0 +Damage = 10.0 +metadata/_edit_group_ = true + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_gmwb3") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_jxptd") + +[node name="Node2D" type="Node2D" parent="."] +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 f08d669d..ca598180 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=35 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=36 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"] @@ -21,6 +21,7 @@ [ext_resource type="PackedScene" uid="uid://b3485f35xal4g" path="res://Scenes/Actors/Turret.tscn" id="18_6y85f"] [ext_resource type="Script" path="res://Scripts/InventoryManager.cs" id="18_dvo37"] [ext_resource type="PackedScene" uid="uid://v8s3kubgb2qg" path="res://Scenes/Enemy.tscn" id="18_ixcwn"] +[ext_resource type="PackedScene" uid="uid://bj28qiai2x2ar" path="res://Scenes/Props/Barrel.tscn" id="18_vy02r"] [ext_resource type="PackedScene" uid="uid://dxs3ks2ucaxl4" path="res://Scenes/Items/Red_Keycard.tscn" id="19_8fb73"] [ext_resource type="PackedScene" uid="uid://d1rlw6ddpmrn8" path="res://Scenes/Actors/Rumia.tscn" id="19_acobs"] [ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="22_krk0o"] @@ -65,7 +66,7 @@ tile_set = ExtResource("3_kgs2x") [node name="Props" type="TileMapLayer" parent="Factory Tilemaps"] y_sort_enabled = true -tile_map_data = PackedByteArray("AADK/wkAAQAAAAAACgC+/wAAAQAAAAAAAgC9/wAAAQAAAAAAAgC+/wEAAQAAAAAAAgC8/wAAAQAAAAAAAQC+/wIAAQAAAAAAAQC+/wUAAQAAAAAAAQDJ/wQAAQAAAAAAAQDI/wQAAQAAAAAAAQDJ/wUAAQAAAAAAAQDD/wQAAQAAAAAAAQDE/wQAAQAAAAAAAQDJ/wsAAQAAAAAAAgCv//3/AQAAAAAAAQCw//3/AQAAAAAAAQCi/wEAAQAAAAAAAQCj/wEAAQAAAAAAAQCk/wEAAQAAAAAAAQCv/wEAAQAAAAAAAQCu/wEAAQAAAAAAAQC2/w0AAAAGAAAAAAC3/w0AAAAHAAAAAADN//P/AAAAAAIAAADQ//P/AAAAAAIAAADF/wQAAAAGAAAAAADG/wQAAAAHAAAAAADJ/wYAAAAIAAAAAADJ/wcAAAAIAAEAAACe/9v/AAAAAAIAAACf/9v/AAAAAAIAAACo/9v/AAAAAAIAAACp/9v/AAAAAAIAAACZ/93/AQAAAAAAAQCZ/97/AQAAAAAAAQCa/93/AQAAAAAAAQCs/93/AQAAAAAAAQCt/93/AQAAAAAAAQCl/93/AQAAAAAAAQCm/93/AQAAAAAAAQCr/+L/AQAAAAAAAQCs/+L/AQAAAAAAAQCt/+L/AQAAAAAAAQCb/+n/AQAAAAAAAQCb/+r/AQAAAAAAAQCc/+n/AQAAAAAAAQCc/+r/AQAAAAAAAQCr/+r/AQAAAAAAAQCs/+r/AQAAAAAAAQCt/+r/AQAAAAAAAQCZ/+H/AQAAAAAAAgCZ/+L/AQAAAAAAAgCv/97/AQAAAAAAAgCv/9//AQAAAAAAAgCv/+D/AQAAAAAAAgCc/93/AQAAAAAAAgCd/93/AQAAAAAAAgCd/9//AQAAAAAAAgCd/+D/AQAAAAAAAgCo/+n/AQAAAAAAAgCo/+r/AQAAAAAAAgCp/+n/AQAAAAAAAgCp/+r/AQAAAAAAAgCd/+f/AQAAAAAAAgCe/+f/AQAAAAAAAgCe/+b/AQAAAAAAAgDQ/+T/AQAAAAAACQDX/+b/AQAAAAAAAgCm//v/AAAAAAIAAACo//v/AAAAAAIAAACq//v/AAAAAAIAAACs//v/AAAAAAIAAACu//v/AAAAAAIAAACx//v/AAAAAAIAAACz//v/AAAAAAIAAAC1//v/AAAAAAIAAACf//v/AAAAAAIAAACd//v/AAAAAAIAAACb//v/AAAAAAIAAACZ//v/AAAAAAIAAADO/+r/AAAHAAIAAADN/+P/AAAIAAIAAAA=") +tile_map_data = PackedByteArray("AADK/wkAAQAAAAAACgC+/wAAAQAAAAAAAgC9/wAAAQAAAAAAAgC+/wEAAQAAAAAAAgC8/wAAAQAAAAAAAQC+/wIAAQAAAAAAAQC+/wUAAQAAAAAAAQDJ/wQAAQAAAAAAAQDI/wQAAQAAAAAAAQDJ/wUAAQAAAAAAAQDD/wQAAQAAAAAAAQDE/wQAAQAAAAAAAQDJ/wsAAQAAAAAAAgCv//3/AQAAAAAAAQCw//3/AQAAAAAAAQCi/wEAAQAAAAAAAQCj/wEAAQAAAAAAAQCk/wEAAQAAAAAAAQCv/wEAAQAAAAAAAQCu/wEAAQAAAAAAAQC2/w0AAAAGAAAAAAC3/w0AAAAHAAAAAADN//P/AAAAAAIAAADQ//P/AAAAAAIAAADF/wQAAAAGAAAAAADG/wQAAAAHAAAAAADJ/wYAAAAIAAAAAADJ/wcAAAAIAAEAAACe/9v/AAAAAAIAAACf/9v/AAAAAAIAAACo/9v/AAAAAAIAAACp/9v/AAAAAAIAAACZ/93/AQAAAAAAAQCZ/97/AQAAAAAAAQCa/93/AQAAAAAAAQCs/93/AQAAAAAAAQCt/93/AQAAAAAAAQCl/93/AQAAAAAAAQCm/93/AQAAAAAAAQCr/+L/AQAAAAAAAQCs/+L/AQAAAAAAAQCt/+L/AQAAAAAAAQCb/+n/AQAAAAAAAQCb/+r/AQAAAAAAAQCc/+n/AQAAAAAAAQCc/+r/AQAAAAAAAQCr/+r/AQAAAAAAAQCs/+r/AQAAAAAAAQCt/+r/AQAAAAAAAQCZ/+H/AQAAAAAAAgCZ/+L/AQAAAAAAAgCv/97/AQAAAAAAAgCv/9//AQAAAAAAAgCv/+D/AQAAAAAAAgCc/93/AQAAAAAAAgCd/93/AQAAAAAAAgCd/9//AQAAAAAAAgCd/+D/AQAAAAAAAgCo/+n/AQAAAAAAAgCo/+r/AQAAAAAAAgCp/+n/AQAAAAAAAgCp/+r/AQAAAAAAAgCd/+f/AQAAAAAAAgCe/+f/AQAAAAAAAgCe/+b/AQAAAAAAAgDQ/+T/AQAAAAAACQDX/+b/AQAAAAAAAgCm//v/AAAAAAIAAACo//v/AAAAAAIAAACq//v/AAAAAAIAAACs//v/AAAAAAIAAACu//v/AAAAAAIAAACx//v/AAAAAAIAAACz//v/AAAAAAIAAAC1//v/AAAAAAIAAACf//v/AAAAAAIAAACd//v/AAAAAAIAAACb//v/AAAAAAIAAACZ//v/AAAAAAIAAADO/+r/AAAHAAIAAADN/+P/AAAIAAIAAADW/+j/AQAAAAAAAQDW/+n/AQAAAAAAAQDX/+j/AQAAAAAAAQDX/+n/AQAAAAAAAQA=") tile_set = ExtResource("3_kgs2x") [node name="HiddenProps" type="Node2D" parent="Factory Tilemaps"] @@ -182,6 +183,12 @@ Target = NodePath("../Teleporter5") [node name="Area2D" parent="Factory Tilemaps" instance=ExtResource("12_i7i2m")] position = Vector2(-710, -459) +[node name="Barrel" parent="Factory Tilemaps" instance=ExtResource("18_vy02r")] +position = Vector2(-711, -395) + +[node name="Barrel2" parent="Factory Tilemaps" instance=ExtResource("18_vy02r")] +position = Vector2(-700, -381) + [node name="CameraController" type="Camera2D" parent="."] script = ExtResource("6_t8ide") pixel_snap = false diff --git a/Sprites/Explosion1.aseprite b/Sprites/Explosion1.aseprite new file mode 100644 index 00000000..996a6148 --- /dev/null +++ b/Sprites/Explosion1.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:455830ea3b359434d19221b6a6a39eeaa33f0f60c3583f204a1389a028805fd9 +size 744 diff --git a/Sprites/Explosion1.png b/Sprites/Explosion1.png new file mode 100644 index 00000000..9e00c5dd --- /dev/null +++ b/Sprites/Explosion1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f4eefb42d663e3e479f4e627d8647068af12b561462924819e811ebf1991e9 +size 699 diff --git a/Sprites/Explosion1.png.import b/Sprites/Explosion1.png.import new file mode 100644 index 00000000..2a51011d --- /dev/null +++ b/Sprites/Explosion1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2bp03a70cpyd" +path="res://.godot/imported/Explosion1.png-0893852bbd0842580fc675244b1a1ef5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/Explosion1.png" +dest_files=["res://.godot/imported/Explosion1.png-0893852bbd0842580fc675244b1a1ef5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1