Create explosion GPUParticle system

pull/8/head
Sascha 2023-10-23 10:41:36 +07:00
parent 08c7d9ea12
commit b396629e90
10 changed files with 117 additions and 41 deletions

@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.2.0-dev.6">
<Project Sdk="Godot.NET.Sdk/4.2.0-beta.2">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>

@ -1,4 +1,4 @@
<Project Sdk="Godot.NET.Sdk/4.2.0-dev.6">
<Project Sdk="Godot.NET.Sdk/4.2.0-beta.2">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>

@ -0,0 +1,10 @@
[gd_resource type="SphereMesh" load_steps=2 format=3 uid="uid://c1bemmgv6st52"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mh4r4"]
albedo_color = Color(1, 1, 0, 0.419608)
emission_enabled = true
emission = Color(1, 0, 0, 1)
emission_energy_multiplier = 10.0
[resource]
material = SubResource("StandardMaterial3D_mh4r4")

@ -1,7 +1,8 @@
[gd_scene load_steps=11 format=3 uid="uid://6dn1gjqffnt"]
[gd_scene load_steps=10 format=3 uid="uid://6dn1gjqffnt"]
[ext_resource type="Script" path="res://Scripts/Asteroid.cs" id="1_ygr21"]
[ext_resource type="Texture2D" uid="uid://bt2aj3hcmb87q" path="res://Textures/prop_asteroid_01_dff.png" id="1_yruod"]
[ext_resource type="PackedScene" uid="uid://chkv84s8orhbr" path="res://Packed-Scenes/explosion.tscn" id="2_d3riq"]
[ext_resource type="Texture2D" uid="uid://swmr1hw148bp" path="res://Textures/prop_asteroid_01_nrm.png" id="2_xbjvi"]
[sub_resource type="SphereShape3D" id="SphereShape3D_leouh"]
@ -52,16 +53,12 @@ normal_enabled = true
normal_scale = 2.0
normal_texture = ExtResource("2_xbjvi")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_615d1"]
[sub_resource type="SphereMesh" id="SphereMesh_28y08"]
[node name="Asteroid_01" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh", "explosion")]
[node name="Asteroid_01" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh")]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
script = ExtResource("1_ygr21")
asteroidRb = NodePath("RigidBody3D")
asteroidMesh = NodePath("RigidBody3D/prop_asteroid_01")
explosion = NodePath("RigidBody3D/Explosion")
explosion = ExtResource("2_d3riq")
[node name="RigidBody3D" type="RigidBody3D" parent="."]
gravity_scale = 0.0
@ -74,8 +71,3 @@ transform = Transform3D(1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0)
mesh = SubResource("ArrayMesh_rks3f")
skeleton = NodePath("")
surface_material_override/0 = SubResource("StandardMaterial3D_32257")
[node name="Explosion" type="GPUParticles3D" parent="RigidBody3D"]
emitting = false
process_material = SubResource("ParticleProcessMaterial_615d1")
draw_pass_1 = SubResource("SphereMesh_28y08")

@ -1,16 +1,13 @@
[gd_scene load_steps=11 format=3 uid="uid://cvlxm2yrohsca"]
[gd_scene load_steps=10 format=3 uid="uid://cvlxm2yrohsca"]
[ext_resource type="Texture2D" uid="uid://c48y5hkprbmre" path="res://Textures/prop_asteroid_02_dff.png" id="1_hvwuc"]
[ext_resource type="Script" path="res://Scripts/Asteroid.cs" id="1_vm3mg"]
[ext_resource type="PackedScene" uid="uid://chkv84s8orhbr" path="res://Packed-Scenes/explosion.tscn" id="2_m7nsk"]
[ext_resource type="Texture2D" uid="uid://8uqgmlpi6x21" path="res://Textures/prop_asteroid_02_nrm.png" id="2_qs4n0"]
[sub_resource type="SphereShape3D" id="SphereShape3D_f4akn"]
radius = 0.715
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_eput4"]
[sub_resource type="SphereMesh" id="SphereMesh_p3hrp"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_n7ttt"]
resource_name = "prop_asteroid_02_mat"
metallic = 0.4
@ -56,12 +53,12 @@ normal_enabled = true
normal_scale = 2.0
normal_texture = ExtResource("2_qs4n0")
[node name="Asteroid_02" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh", "explosion")]
[node name="Asteroid_02" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh")]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
script = ExtResource("1_vm3mg")
asteroidRb = NodePath("RigidBody3D")
asteroidMesh = NodePath("RigidBody3D/prop_asteroid_02")
explosion = NodePath("RigidBody3D/Explosion")
explosion = ExtResource("2_m7nsk")
[node name="RigidBody3D" type="RigidBody3D" parent="."]
gravity_scale = 0.0
@ -69,11 +66,6 @@ gravity_scale = 0.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D"]
shape = SubResource("SphereShape3D_f4akn")
[node name="Explosion" type="GPUParticles3D" parent="RigidBody3D"]
emitting = false
process_material = SubResource("ParticleProcessMaterial_eput4")
draw_pass_1 = SubResource("SphereMesh_p3hrp")
[node name="prop_asteroid_02" type="MeshInstance3D" parent="RigidBody3D"]
transform = Transform3D(1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0)
mesh = SubResource("ArrayMesh_jk0jt")

@ -1,16 +1,13 @@
[gd_scene load_steps=11 format=3 uid="uid://brqqgidqchi88"]
[gd_scene load_steps=10 format=3 uid="uid://brqqgidqchi88"]
[ext_resource type="Script" path="res://Scripts/Asteroid.cs" id="1_ph38x"]
[ext_resource type="Texture2D" uid="uid://4sc40fjd4myy" path="res://Textures/prop_asteroid_03_dff.png" id="1_wdgmr"]
[ext_resource type="PackedScene" uid="uid://chkv84s8orhbr" path="res://Packed-Scenes/explosion.tscn" id="2_00f7o"]
[ext_resource type="Texture2D" uid="uid://qy0a83vkelqe" path="res://Textures/prop_asteroid_03_nrm.png" id="2_5yqc5"]
[sub_resource type="SphereShape3D" id="SphereShape3D_iq8kl"]
radius = 0.847
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_6ipvl"]
[sub_resource type="SphereMesh" id="SphereMesh_1s5ky"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pvmxy"]
resource_name = "prop_asteroid_03_mat"
metallic = 0.4
@ -56,12 +53,12 @@ normal_enabled = true
normal_scale = 2.0
normal_texture = ExtResource("2_5yqc5")
[node name="Asteroid_03" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh", "explosion")]
[node name="Asteroid_03" type="Node3D" node_paths=PackedStringArray("asteroidRb", "asteroidMesh")]
transform = Transform3D(0.25, 0, 0, 0, 0.25, 0, 0, 0, 0.25, 0, 0, 0)
script = ExtResource("1_ph38x")
asteroidRb = NodePath("RigidBody3D")
asteroidMesh = NodePath("RigidBody3D/prop_asteroid_03")
explosion = NodePath("RigidBody3D/Explosion")
explosion = ExtResource("2_00f7o")
[node name="RigidBody3D" type="RigidBody3D" parent="."]
gravity_scale = 0.0
@ -69,11 +66,6 @@ gravity_scale = 0.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D"]
shape = SubResource("SphereShape3D_iq8kl")
[node name="Explosion" type="GPUParticles3D" parent="RigidBody3D"]
emitting = false
process_material = SubResource("ParticleProcessMaterial_6ipvl")
draw_pass_1 = SubResource("SphereMesh_1s5ky")
[node name="prop_asteroid_03" type="MeshInstance3D" parent="RigidBody3D"]
mesh = SubResource("ArrayMesh_rnkma")
skeleton = NodePath("")

@ -0,0 +1,68 @@
[gd_scene load_steps=11 format=3 uid="uid://chkv84s8orhbr"]
[ext_resource type="SphereMesh" uid="uid://c1bemmgv6st52" path="res://Material/explosion.tres" id="1_6sgsn"]
[ext_resource type="Script" path="res://Scripts/Explosion.cs" id="2_y6oxt"]
[sub_resource type="Curve" id="Curve_i7efe"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_xp5x6"]
curve = SubResource("Curve_i7efe")
[sub_resource type="Curve" id="Curve_43f32"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_s7b1r"]
curve = SubResource("Curve_43f32")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ssaw8"]
emission_shape = 1
emission_sphere_radius = 1.0
radial_velocity_min = 1.0
radial_velocity_max = 2.0
radial_velocity_curve = SubResource("CurveTexture_xp5x6")
gravity = Vector3(0, 0, 0)
scale_min = 0.01
scale_max = 0.04
scale_curve = SubResource("CurveTexture_s7b1r")
turbulence_noise_strength = 0.5
turbulence_influence_max = 0.2
collision_mode = 2
collision_use_scale = true
sub_emitter_mode = 3
sub_emitter_amount_at_collision = 32
sub_emitter_keep_velocity = true
[sub_resource type="Curve" id="Curve_w41ea"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0gt11"]
albedo_color = Color(1, 1, 0, 1)
albedo_texture_msdf = true
emission_enabled = true
emission = Color(1, 0, 0, 1)
emission_energy_multiplier = 10.0
use_particle_trails = true
[sub_resource type="RibbonTrailMesh" id="RibbonTrailMesh_gna8o"]
material = SubResource("StandardMaterial3D_0gt11")
size = 0.2
curve = SubResource("Curve_w41ea")
[node name="Explosion" type="GPUParticles3D"]
emitting = false
amount = 100
sub_emitter = NodePath(".")
lifetime = 2.0
one_shot = true
explosiveness = 1.0
trail_enabled = true
trail_lifetime = 1.0
process_material = SubResource("ParticleProcessMaterial_ssaw8")
draw_passes = 2
draw_pass_1 = ExtResource("1_6sgsn")
draw_pass_2 = SubResource("RibbonTrailMesh_gna8o")
script = ExtResource("2_y6oxt")

@ -5,7 +5,7 @@ namespace Scripts;
public partial class Asteroid : Node3D {
[Export] private RigidBody3D asteroidRb;
[Export] private MeshInstance3D asteroidMesh;
[Export] private GpuParticles3D explosion;
[Export] private PackedScene explosion;
private float speed;
private float rotSpeed = 100f;
@ -46,8 +46,13 @@ public partial class Asteroid : Node3D {
}
}
public void Explode() {
explosion.Emitting = true;
private void Explode() {
if (explosion.Instantiate() is GpuParticles3D ex) {
GetParent().AddChild(ex);
ex.Position = Position;
ex.Emitting = true;
}
QueueFree();
}
}

@ -0,0 +1,8 @@
using Godot;
public partial class Explosion : GpuParticles3D
{
public override void _Process(double delta) {
if (!Emitting) QueueFree();
}
}

@ -0,0 +1,9 @@
shader_type particles;
void start() {
// Called when a particle is spawned.
}
void process() {
// Called every frame on existing particles (according to the Fixed FPS property).
}