diff --git a/camera-effects.tscn b/camera-effects.tscn
index f8bdb42..da33fc4 100644
--- a/camera-effects.tscn
+++ b/camera-effects.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=15 format=3 uid="uid://c051w6upl0t16"]
+[gd_scene load_steps=16 format=3 uid="uid://c051w6upl0t16"]
[ext_resource type="PackedScene" uid="uid://bydyult2k5rcb" path="res://addons/kenney_prototype_tools/scenes/green/green_01.tscn" id="1_61jfr"]
[ext_resource type="PackedScene" uid="uid://bjupt5nu14hth" path="res://addons/kenney_prototype_tools/scenes/dark/dark_05.tscn" id="2_xlmfj"]
@@ -11,6 +11,7 @@
[ext_resource type="PackedScene" uid="uid://ds5xw2us1br3q" path="res://camera-effects/vignette.tscn" id="9_q1phu"]
[ext_resource type="PackedScene" uid="uid://dv3o1u4hc11vn" path="res://camera-effects/sepia.tscn" id="10_rqewe"]
[ext_resource type="PackedScene" uid="uid://cf1adbox8xy7e" path="res://camera-effects/grain_noise.tscn" id="11_3qobw"]
+[ext_resource type="PackedScene" uid="uid://dwppksddt4t0x" path="res://camera-effects/hexagon_mosaic.tscn" id="12_uvrob"]
[sub_resource type="Environment" id="Environment_tln01"]
glow_blend_mode = 4
@@ -165,3 +166,6 @@ visible = false
visible = false
[node name="Grain Noise" parent="CanvasLayer" instance=ExtResource("11_3qobw")]
+visible = false
+
+[node name="Hexagon Mosaic" parent="CanvasLayer" instance=ExtResource("12_uvrob")]
diff --git a/camera-effects/hexagon-mosaic.gdshader b/camera-effects/hexagon-mosaic.gdshader
new file mode 100644
index 0000000..a1d4d30
--- /dev/null
+++ b/camera-effects/hexagon-mosaic.gdshader
@@ -0,0 +1,25 @@
+shader_type canvas_item;
+
+// source: https://docs.godotengine.org/en/4.0/tutorials/shaders/custom_postprocessing.html
+
+uniform vec2 size = vec2(32.0, 28.0);
+uniform sampler2D screen_texture : hint_screen_texture, repeat_disable, filter_nearest;
+
+void fragment() {
+ vec2 norm_size = size * SCREEN_PIXEL_SIZE;
+ bool half = mod(SCREEN_UV.y / 2.0, norm_size.y) / norm_size.y < 0.5;
+ vec2 uv = SCREEN_UV + vec2(norm_size.x * 0.5 * float(half), 0.0);
+ vec2 center_uv = floor(uv / norm_size) * norm_size;
+ vec2 norm_uv = mod(uv, norm_size) / norm_size;
+ center_uv += mix(vec2(0.0, 0.0),
+ mix(mix(vec2(norm_size.x, -norm_size.y),
+ vec2(0.0, -norm_size.y),
+ float(norm_uv.x < 0.5)),
+ mix(vec2(0.0, -norm_size.y),
+ vec2(-norm_size.x, -norm_size.y),
+ float(norm_uv.x < 0.5)),
+ float(half)),
+ float(norm_uv.y < 0.3333333) * float(norm_uv.y / 0.3333333 < (abs(norm_uv.x - 0.5) * 2.0)));
+
+ COLOR = textureLod(screen_texture, center_uv, 0.0);
+}
\ No newline at end of file
diff --git a/camera-effects/hexagon_mosaic.tscn b/camera-effects/hexagon_mosaic.tscn
new file mode 100644
index 0000000..a1c88bf
--- /dev/null
+++ b/camera-effects/hexagon_mosaic.tscn
@@ -0,0 +1,15 @@
+[gd_scene load_steps=3 format=3 uid="uid://dwppksddt4t0x"]
+
+[ext_resource type="Shader" path="res://camera-effects/hexagon-mosaic.gdshader" id="1_mlp7a"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_wpu0h"]
+shader = ExtResource("1_mlp7a")
+shader_parameter/size = Vector2(16, 14)
+
+[node name="Hexagon Mosaic" type="ColorRect"]
+material = SubResource("ShaderMaterial_wpu0h")
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
diff --git a/environments/black-environment.tres b/environments/black-environment.tres
index c1eb86a..aecfe32 100644
--- a/environments/black-environment.tres
+++ b/environments/black-environment.tres
@@ -3,6 +3,7 @@
[resource]
background_mode = 1
glow_enabled = true
-glow_blend_mode = 4
+glow_strength = 1.1
+glow_blend_mode = 0
fog_light_energy = 0.82
fog_sun_scatter = 0.15
diff --git a/godot-visual-effects.csproj b/godot-visual-effects.csproj
new file mode 100644
index 0000000..892c0e3
--- /dev/null
+++ b/godot-visual-effects.csproj
@@ -0,0 +1,9 @@
+
+
+ net6.0
+ net7.0
+ net8.0
+ true
+ godotvisualeffects
+
+
\ No newline at end of file
diff --git a/godot-visual-effects.sln b/godot-visual-effects.sln
new file mode 100644
index 0000000..885dc78
--- /dev/null
+++ b/godot-visual-effects.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "godot-visual-effects", "godot-visual-effects.csproj", "{480A32A8-1426-4EFE-9E53-145C2A6D2882}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ ExportDebug|Any CPU = ExportDebug|Any CPU
+ ExportRelease|Any CPU = ExportRelease|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
+ {480A32A8-1426-4EFE-9E53-145C2A6D2882}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/particle-effects.tscn b/particle-effects.tscn
index 30f428c..90ec27c 100644
--- a/particle-effects.tscn
+++ b/particle-effects.tscn
@@ -1,14 +1,16 @@
-[gd_scene load_steps=12 format=3 uid="uid://chomobsn1vdo4"]
+[gd_scene load_steps=14 format=3 uid="uid://chomobsn1vdo4"]
[ext_resource type="Environment" uid="uid://dxrk0u62aekxt" path="res://environments/black-environment.tres" id="1_k1rat"]
[ext_resource type="PackedScene" uid="uid://cxj4cf67il71y" path="res://particles/smoke.tscn" id="1_vs4eb"]
[ext_resource type="PackedScene" uid="uid://c4g1wgyk5ynef" path="res://particles/fire.tscn" id="2_ua5o7"]
[ext_resource type="PackedScene" uid="uid://bdwxckix3vslo" path="res://particles/hurricane.tscn" id="3_1jf4n"]
-[ext_resource type="PackedScene" uid="uid://ce6advdj56x0c" path="res://particles/hyperdrive.tscn" id="4_waeec"]
+[ext_resource type="PackedScene" path="res://particles/hyperdrive.tscn" id="4_waeec"]
[ext_resource type="PackedScene" uid="uid://b2dthk7xytysh" path="res://particles/shield.tscn" id="5_iqqai"]
-[ext_resource type="PackedScene" uid="uid://ck5vuhi3tffgl" path="res://particles/sparks.tscn" id="6_n8y86"]
+[ext_resource type="PackedScene" uid="uid://1p0djdxytw42" path="res://particles/sparks.tscn" id="6_n8y86"]
[ext_resource type="PackedScene" uid="uid://1nbihtdf4hnv" path="res://particles/rain.tscn" id="8_pqidy"]
[ext_resource type="PackedScene" uid="uid://jyk4uwcupa50" path="res://particles/impact.tscn" id="9_x76w5"]
+[ext_resource type="PackedScene" uid="uid://brf0ftux0hwy8" path="res://particles/shockwave.tscn" id="10_e5e8r"]
+[ext_resource type="PackedScene" uid="uid://10u16dtnpupt" path="res://particles/implosion.tscn" id="11_df01b"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_njwlo"]
shading_mode = 0
@@ -23,7 +25,6 @@ size = Vector2(10, 10)
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(0.707107, -0.40558, 0.579228, 0, 0.819152, 0.573576, -0.707107, -0.40558, 0.579228, 30, 30, 30)
environment = ExtResource("1_k1rat")
-projection = 1
current = true
fov = 3.8
size = 3.0
@@ -57,18 +58,18 @@ visible = false
visible = false
[node name="Sparks" parent="." instance=ExtResource("6_n8y86")]
-visible = false
[node name="Rain" parent="." instance=ExtResource("8_pqidy")]
visible = false
[node name="Impact" parent="." instance=ExtResource("9_x76w5")]
+visible = false
-[node name="Shockwave" type="Node3D" parent="."]
+[node name="Shockwave" parent="." instance=ExtResource("10_e5e8r")]
+visible = false
+
+[node name="Implosion" parent="." instance=ExtResource("11_df01b")]
visible = false
[node name="Electricity" type="Node3D" parent="."]
visible = false
-
-[node name="Implosion" type="Node3D" parent="."]
-visible = false
diff --git a/particles/implosion.tscn b/particles/implosion.tscn
new file mode 100644
index 0000000..99e22ed
--- /dev/null
+++ b/particles/implosion.tscn
@@ -0,0 +1,128 @@
+[gd_scene load_steps=23 format=3 uid="uid://10u16dtnpupt"]
+
+[ext_resource type="Script" path="res://scripts/MultiParticles.cs" id="1_weson"]
+[ext_resource type="Texture2D" uid="uid://b8yqiftn6q2ij" path="res://addons/kenney_particle_pack/circle_05.png" id="2_qtlvw"]
+
+[sub_resource type="Curve" id="Curve_tpndr"]
+_data = [Vector2(0.782074, 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_wtgks"]
+curve = SubResource("Curve_tpndr")
+
+[sub_resource type="Curve" id="Curve_7t07v"]
+min_value = -5.0
+max_value = 5.0
+_data = [Vector2(0, -5), 0.0, 0.0, 0, 0, Vector2(0.495606, -5), 0.0, 0.0, 0, 0, Vector2(1, 0.00593328), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_8froe"]
+curve = SubResource("Curve_7t07v")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_50j2f"]
+emission_shape = 2
+emission_sphere_radius = 3.0
+gravity = Vector3(2.08165e-12, 2.08165e-12, 2.08165e-12)
+radial_accel_min = 0.2
+radial_accel_max = 0.2
+radial_accel_curve = SubResource("CurveTexture_8froe")
+color = Color(0, 0.564706, 1, 1)
+alpha_curve = SubResource("CurveTexture_wtgks")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_blklt"]
+transparency = 1
+vertex_color_use_as_albedo = true
+albedo_texture = ExtResource("2_qtlvw")
+emission_enabled = true
+emission = Color(0, 0.741176, 1, 1)
+emission_energy_multiplier = 5.0
+rim_enabled = true
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_lxuhl"]
+material = SubResource("StandardMaterial3D_blklt")
+size = Vector2(0.1, 0.1)
+
+[sub_resource type="Curve" id="Curve_0jmg7"]
+_data = [Vector2(0.251318, 1), 0.0, 0.0, 0, 0, Vector2(0.991213, 0), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="CurveTexture" id="CurveTexture_gf3su"]
+curve = SubResource("Curve_0jmg7")
+
+[sub_resource type="Gradient" id="Gradient_vj4no"]
+offsets = PackedFloat32Array(0.448141, 0.636008)
+colors = PackedColorArray(0, 0.894118, 1, 1, 0, 0.564706, 1, 1)
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_8k4ey"]
+gradient = SubResource("Gradient_vj4no")
+
+[sub_resource type="Curve" id="Curve_iutvr"]
+_data = [Vector2(0.490334, 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_ga1td"]
+curve = SubResource("Curve_iutvr")
+
+[sub_resource type="Curve" id="Curve_yuhne"]
+max_value = 5.0
+_data = [Vector2(0, 0.169831), 0.0, 0.0, 0, 0, Vector2(0.625659, 0.729012), 0.0, 0.0, 0, 0, Vector2(1, 4.63364), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_nfm8j"]
+curve = SubResource("Curve_yuhne")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_t7lly"]
+gravity = Vector3(2.08165e-12, 2.08165e-12, 2.08165e-12)
+scale_curve = SubResource("CurveTexture_nfm8j")
+color_ramp = SubResource("GradientTexture1D_8k4ey")
+alpha_curve = SubResource("CurveTexture_gf3su")
+emission_curve = SubResource("CurveTexture_ga1td")
+
+[sub_resource type="Gradient" id="Gradient_30bhn"]
+offsets = PackedFloat32Array(0.506744, 0.689788)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_1pmsb"]
+gradient = SubResource("Gradient_30bhn")
+width = 256
+height = 256
+fill = 1
+fill_from = Vector2(0.5, 0.5)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k5esa"]
+transparency = 1
+blend_mode = 1
+vertex_color_use_as_albedo = true
+albedo_texture = SubResource("GradientTexture2D_1pmsb")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_gvf03"]
+material = SubResource("StandardMaterial3D_k5esa")
+
+[node name="Implosion" type="Node3D" node_paths=PackedStringArray("Particles")]
+script = ExtResource("1_weson")
+Particles = [NodePath("Bits"), NodePath("Sphere")]
+
+[node name="Bits" type="GPUParticles3D" parent="."]
+amount = 64
+lifetime = 4.0
+explosiveness = 1.0
+fixed_fps = 60
+process_material = SubResource("ParticleProcessMaterial_50j2f")
+draw_pass_1 = SubResource("QuadMesh_lxuhl")
+
+[node name="Sphere" type="GPUParticles3D" parent="."]
+amount = 1
+lifetime = 4.0
+fixed_fps = 60
+process_material = SubResource("ParticleProcessMaterial_t7lly")
+draw_pass_1 = SubResource("QuadMesh_gvf03")
diff --git a/particles/shockwave.tscn b/particles/shockwave.tscn
new file mode 100644
index 0000000..f81479d
--- /dev/null
+++ b/particles/shockwave.tscn
@@ -0,0 +1,87 @@
+[gd_scene load_steps=17 format=3 uid="uid://brf0ftux0hwy8"]
+
+[ext_resource type="Script" path="res://scripts/MultiParticles.cs" id="1_yvu1a"]
+[ext_resource type="Texture2D" uid="uid://bd2arrqo7xw7c" path="res://addons/kenney_particle_pack/circle_01.png" id="2_s6tl6"]
+
+[sub_resource type="Curve" id="Curve_jaxyf"]
+_data = [Vector2(0.381371, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0937408), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="CurveTexture" id="CurveTexture_qx1ma"]
+curve = SubResource("Curve_jaxyf")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_dbh2b"]
+gravity = Vector3(2.08165e-12, 2.08165e-12, 2.08165e-12)
+scale_curve = SubResource("CurveTexture_qx1ma")
+
+[sub_resource type="Gradient" id="Gradient_2mquu"]
+offsets = PackedFloat32Array(0.506744, 0.689788)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_fmsbu"]
+gradient = SubResource("Gradient_2mquu")
+width = 256
+height = 256
+fill = 1
+fill_from = Vector2(0.5, 0.5)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_82lug"]
+transparency = 1
+blend_mode = 1
+vertex_color_use_as_albedo = true
+albedo_texture = SubResource("GradientTexture2D_fmsbu")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="QuadMesh" id="QuadMesh_vwe5g"]
+material = SubResource("StandardMaterial3D_82lug")
+
+[sub_resource type="Curve" id="Curve_q71c2"]
+_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_5xkdf"]
+curve = SubResource("Curve_q71c2")
+
+[sub_resource type="Curve" id="Curve_0s8ld"]
+max_value = 3.0
+_data = [Vector2(0, 0.0927029), 0.0, 0.0, 0, 0, Vector2(1, 3), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="CurveTexture" id="CurveTexture_406ad"]
+curve = SubResource("Curve_0s8ld")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_aak2r"]
+gravity = Vector3(2.08165e-12, 2.08165e-12, 2.08165e-12)
+scale_curve = SubResource("CurveTexture_406ad")
+alpha_curve = SubResource("CurveTexture_5xkdf")
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y7i1b"]
+transparency = 1
+vertex_color_use_as_albedo = true
+albedo_texture = ExtResource("2_s6tl6")
+rim_enabled = true
+
+[sub_resource type="PlaneMesh" id="PlaneMesh_iktve"]
+material = SubResource("StandardMaterial3D_y7i1b")
+
+[node name="Shockwave" type="Node3D" node_paths=PackedStringArray("Particles")]
+script = ExtResource("1_yvu1a")
+Particles = [NodePath("Sphere"), NodePath("Ripple")]
+
+[node name="Sphere" type="GPUParticles3D" parent="."]
+amount = 1
+lifetime = 3.0
+fixed_fps = 60
+process_material = SubResource("ParticleProcessMaterial_dbh2b")
+draw_pass_1 = SubResource("QuadMesh_vwe5g")
+
+[node name="Ripple" type="GPUParticles3D" parent="."]
+amount = 3
+lifetime = 3.0
+explosiveness = 0.8
+process_material = SubResource("ParticleProcessMaterial_aak2r")
+draw_pass_1 = SubResource("PlaneMesh_iktve")
diff --git a/particles/sparks.tscn b/particles/sparks.tscn
index c0dbd44..6fb0acb 100644
--- a/particles/sparks.tscn
+++ b/particles/sparks.tscn
@@ -1,10 +1,10 @@
-[gd_scene load_steps=7 format=3 uid="uid://ck5vuhi3tffgl"]
+[gd_scene load_steps=7 format=3 uid="uid://1p0djdxytw42"]
[ext_resource type="Texture2D" uid="uid://iupf6jfowd7a" path="res://addons/kenney_particle_pack/trace_01.png" id="1_au4er"]
[sub_resource type="Gradient" id="Gradient_206ev"]
-offsets = PackedFloat32Array(0, 0.209386)
-colors = PackedColorArray(1, 0.8, 0, 1, 1, 0, 0, 1)
+offsets = PackedFloat32Array(0, 0.385519, 0.866928)
+colors = PackedColorArray(1, 0.8, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_lfvhw"]
gradient = SubResource("Gradient_206ev")
@@ -23,15 +23,16 @@ scale_min = 0.8
color_ramp = SubResource("GradientTexture1D_lfvhw")
collision_mode = 1
collision_friction = 0.2
-collision_bounce = 0.5
+collision_bounce = 0.8
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vihpm"]
transparency = 1
blend_mode = 1
vertex_color_use_as_albedo = true
albedo_texture = ExtResource("1_au4er")
-emission = Color(1, 1, 0, 1)
-emission_energy_multiplier = 8.05
+emission_enabled = true
+emission = Color(1, 0.0705882, 0, 1)
+emission_energy_multiplier = 2.0
rim_enabled = true
[sub_resource type="QuadMesh" id="QuadMesh_wyolc"]
@@ -41,7 +42,7 @@ size = Vector2(0.5, 0.5)
[node name="Sparks" type="GPUParticles3D"]
transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 0, 0, 0)
amount = 48
-lifetime = 3.0
+lifetime = 5.0
speed_scale = 1.5
randomness = 0.3
fixed_fps = 60
diff --git a/scripts/MultiParticles.cs b/scripts/MultiParticles.cs
index 81e4e39..9811a0f 100644
--- a/scripts/MultiParticles.cs
+++ b/scripts/MultiParticles.cs
@@ -1,65 +1,60 @@
-using System;
using Godot;
+using System;
-/**
- * MultiParticles : Node3D
- *
- * This class turns possible to control multiple particles in sync.
- * Inspired by https://www.reddit.com/r/godot/comments/181ui9c/comment/kaewcca/?context=3
- */
public partial class MultiParticles : Node3D
{
- [Export]
- public bool Emitting = true;
+ [Export]
+ public bool Emitting = true;
- [Export]
- public bool OneShot = false;
+ [Export]
+ public bool OneShot = false;
- [Export]
- public Godot.Collections.Array Particles;
+ [Export]
+ public Godot.Collections.Array Particles;
- double Lifetime = 0.0f;
+ double Lifetime = 0.0f;
- public override void _Ready()
- {
- if (Emitting)
- {
- StartEmitters();
- }
- }
+ public override void _Ready()
+ {
+ if (Emitting)
+ {
+ StartEmitters();
+ }
+ }
- void GetLifetime()
- {
- foreach (var particle in Particles)
- {
- if (particle.Lifetime > Lifetime)
- {
- Lifetime = particle.Lifetime;
- }
- }
- }
+ void GetLifetime()
+ {
+ foreach (var particle in Particles)
+ {
+ if (particle.Lifetime > Lifetime)
+ {
+ Lifetime = particle.Lifetime;
+ }
+ }
+ }
- public async void StartEmitters()
- {
- GetLifetime();
+ public async void StartEmitters()
+ {
+ GetLifetime();
- foreach (var particle in Particles)
- particle.Emitting = true;
+ foreach (var particle in Particles)
+ particle.Emitting = true;
- await ToSignal(GetTree().CreateTimer(Lifetime), SceneTreeTimer.SignalName.Timeout);
- DisposeOfEmitters();
+ await ToSignal(GetTree().CreateTimer(Lifetime), SceneTreeTimer.SignalName.Timeout);
+ DisposeOfEmitters();
- if (!OneShot)
- {
- StartEmitters();
- }
- }
+ if (!OneShot)
+ {
+ StartEmitters();
+ }
+ }
+
+ void DisposeOfEmitters()
+ {
+ foreach (var particle in Particles)
+ {
+ particle.Emitting = false;
+ }
+ }
- void DisposeOfEmitters()
- {
- foreach (var particle in Particles)
- {
- particle.Emitting = false;
- }
- }
}