mirror of
https://github.com/marinho/godot-visual-effects.git
synced 2024-12-22 14:37:27 +08:00
Hexagon mosaic, implosion, shockwave
This commit is contained in:
parent
e3e1929394
commit
fbc3a59652
@ -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")]
|
||||
|
25
camera-effects/hexagon-mosaic.gdshader
Normal file
25
camera-effects/hexagon-mosaic.gdshader
Normal file
@ -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);
|
||||
}
|
15
camera-effects/hexagon_mosaic.tscn
Normal file
15
camera-effects/hexagon_mosaic.tscn
Normal file
@ -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
|
@ -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
|
||||
|
9
godot-visual-effects.csproj
Normal file
9
godot-visual-effects.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Godot.NET.Sdk/4.2.0">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net7.0</TargetFramework>
|
||||
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'ios' ">net8.0</TargetFramework>
|
||||
<EnableDynamicLoading>true</EnableDynamicLoading>
|
||||
<RootNamespace>godotvisualeffects</RootNamespace>
|
||||
</PropertyGroup>
|
||||
</Project>
|
19
godot-visual-effects.sln
Normal file
19
godot-visual-effects.sln
Normal file
@ -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
|
@ -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
|
||||
|
128
particles/implosion.tscn
Normal file
128
particles/implosion.tscn
Normal file
@ -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")
|
87
particles/shockwave.tscn
Normal file
87
particles/shockwave.tscn
Normal file
@ -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")
|
@ -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
|
||||
|
@ -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<GpuParticles3D> Particles;
|
||||
[Export]
|
||||
public Godot.Collections.Array<GpuParticles3D> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user