mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-15 21:43:48 +00:00
Explosions
This commit is contained in:
parent
f28c956014
commit
b4a35ac3d4
7 changed files with 134 additions and 30 deletions
|
|
@ -15,6 +15,8 @@ public partial class Barrel : Area2D, IDestructible
|
||||||
|
|
||||||
[Export] public PackedScene ExplosionParticles { get; set; }
|
[Export] public PackedScene ExplosionParticles { get; set; }
|
||||||
|
|
||||||
|
[Export] public PackedScene ExplosionScene { get; set; }
|
||||||
|
|
||||||
private float _currentHealth = 0f;
|
private float _currentHealth = 0f;
|
||||||
|
|
||||||
private bool _isDestroyed = false;
|
private bool _isDestroyed = false;
|
||||||
|
|
@ -32,21 +34,61 @@ public partial class Barrel : Area2D, IDestructible
|
||||||
|
|
||||||
private void Explode()
|
private void Explode()
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Boom");
|
//ApplyExplosionDamage();
|
||||||
|
CreateExplosion();
|
||||||
CreateParticles();
|
CreateParticles();
|
||||||
CreateDebris();
|
CreateDebris();
|
||||||
QueueFree();
|
QueueFree();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CreateExplosion()
|
||||||
|
{
|
||||||
|
if (ExplosionScene == null) return;
|
||||||
|
|
||||||
|
var explosion = this.CreateSibling<Bullet>(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<Node2D>();
|
||||||
|
|
||||||
|
|
||||||
|
if (collider.GetParent<Area2D>() is IDestructible destructible)
|
||||||
|
{
|
||||||
|
GD.Print($"HITTING {collider.Name}");
|
||||||
|
destructible.Hit(ExplosionDamage);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GD.Print($"Collider {collider.Name} was not idestructible");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CreateDebris()
|
private void CreateDebris()
|
||||||
{
|
{
|
||||||
this.CreateSibling<Barrel>(DebrisScene);
|
this.CreateSibling<Barrel>(DebrisScene);
|
||||||
|
|
||||||
// if (DebrisScene == null) return;
|
|
||||||
// var debris = DebrisScene.Instantiate<Barrel>();
|
|
||||||
// Owner.CallDeferred("add_child", debris); //.AddChild(debris);
|
|
||||||
// debris.Transform = this.GlobalTransform;
|
|
||||||
// debris.Position = this.Position;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateParticles()
|
private void CreateParticles()
|
||||||
|
|
@ -59,32 +101,15 @@ public partial class Barrel : Area2D, IDestructible
|
||||||
|
|
||||||
particle.Emitting = true;
|
particle.Emitting = true;
|
||||||
|
|
||||||
// if (ExplosionParticles == null) return;
|
|
||||||
// var emitter = ExplosionParticles.Instantiate<GpuParticles2D>();
|
|
||||||
// Owner.CallDeferred("add_child", emitter);
|
|
||||||
// emitter.Transform = this.GlobalTransform;
|
|
||||||
// emitter.Position = this.Position;
|
|
||||||
//
|
|
||||||
// emitter.Emitting = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// private T CreateChild<T>(PackedScene prefab) where T : Node2D
|
|
||||||
// {
|
|
||||||
// if (prefab == null) return null;
|
|
||||||
// var newInstance = prefab.Instantiate<T>();
|
|
||||||
// Owner.CallDeferred("add_child", newInstance);
|
|
||||||
// newInstance.Transform = this.GlobalTransform;
|
|
||||||
// newInstance.Position = this.Position;
|
|
||||||
//
|
|
||||||
// return newInstance;
|
|
||||||
// }
|
|
||||||
|
|
||||||
public void Hit(float damage)
|
public void Hit(float damage)
|
||||||
{
|
{
|
||||||
if (_isDestroyed) return;
|
if (_isDestroyed) return;
|
||||||
|
|
||||||
_currentHealth -= damage;
|
_currentHealth -= damage;
|
||||||
if (!(_currentHealth <= 0)) return;
|
if (_currentHealth > 0) return;
|
||||||
_isDestroyed = true;
|
_isDestroyed = true;
|
||||||
Explode();
|
Explode();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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="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="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://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://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"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2ewfl"]
|
||||||
size = Vector2(11, 14)
|
size = Vector2(11, 14)
|
||||||
|
|
@ -20,10 +21,11 @@ collision_layer = 64
|
||||||
collision_mask = 138
|
collision_mask = 138
|
||||||
script = ExtResource("1_avwdx")
|
script = ExtResource("1_avwdx")
|
||||||
Health = 2.0
|
Health = 2.0
|
||||||
ExplosionRadius = 2.0
|
ExplosionRadius = 4.0
|
||||||
ExplosionDamage = 2.0
|
ExplosionDamage = 3.0
|
||||||
DebrisScene = ExtResource("2_f145b")
|
DebrisScene = ExtResource("2_f145b")
|
||||||
ExplosionParticles = ExtResource("3_sm378")
|
ExplosionParticles = ExtResource("3_sm378")
|
||||||
|
ExplosionScene = ExtResource("4_epbro")
|
||||||
metadata/_edit_group_ = true
|
metadata/_edit_group_ = true
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
|
|
||||||
30
Scenes/Weapons/Bullets/explosion.tscn
Normal file
30
Scenes/Weapons/Bullets/explosion.tscn
Normal file
|
|
@ -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"]
|
||||||
|
|
@ -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="Script" path="res://Scripts/GameManager.cs" id="1_8tmoj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_8mh54"]
|
[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="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="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://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://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://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"]
|
[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"]
|
[node name="Props" type="TileMapLayer" parent="Factory Tilemaps"]
|
||||||
y_sort_enabled = true
|
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")
|
tile_set = ExtResource("3_kgs2x")
|
||||||
|
|
||||||
[node name="HiddenProps" type="Node2D" parent="Factory Tilemaps"]
|
[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")]
|
[node name="Area2D" parent="Factory Tilemaps" instance=ExtResource("12_i7i2m")]
|
||||||
position = Vector2(-710, -459)
|
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="."]
|
[node name="CameraController" type="Camera2D" parent="."]
|
||||||
script = ExtResource("6_t8ide")
|
script = ExtResource("6_t8ide")
|
||||||
pixel_snap = false
|
pixel_snap = false
|
||||||
|
|
|
||||||
BIN
Sprites/Explosion1.aseprite
(Stored with Git LFS)
Normal file
BIN
Sprites/Explosion1.aseprite
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
Sprites/Explosion1.png
(Stored with Git LFS)
Normal file
BIN
Sprites/Explosion1.png
(Stored with Git LFS)
Normal file
Binary file not shown.
34
Sprites/Explosion1.png.import
Normal file
34
Sprites/Explosion1.png.import
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue