diff --git a/design/particles.svg b/design/particles.svg new file mode 100644 index 0000000..ec1cabe --- /dev/null +++ b/design/particles.svg @@ -0,0 +1,166 @@ + + + + diff --git a/src/base-environments/youth_room/youth_room.tscn b/src/base-environments/youth_room/youth_room.tscn index b8b8bd9..5e1293e 100644 --- a/src/base-environments/youth_room/youth_room.tscn +++ b/src/base-environments/youth_room/youth_room.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=34 format=3 uid="uid://b3b0gyvklqn50"] +[gd_scene load_steps=41 format=3 uid="uid://b3b0gyvklqn50"] [ext_resource type="Script" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"] [ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"] @@ -472,6 +472,44 @@ viewport_path = NodePath("Collectable/Collectable_ui/Sprite3D/SubViewport") radius = 0.342951 height = 1.08154 +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_f1g8m"] +radius = 0.156739 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_kewqg"] +radius = 0.787239 +height = 3.19663 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_k4x40"] +radius = 1.0352 +height = 2.55391 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_4q8vc"] +radius = 1.14469 +height = 3.78697 + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_n20ff"] +radius = 1.73984 +height = 5.43669 + +[sub_resource type="GDScript" id="GDScript_uyt24"] +script/source = "extends StaticBody3D +var risen:bool = false +var start_position:Vector3 = position + +func raise(_discard): + if not risen: + var raiser = create_tween() + raiser.tween_property(self, \"position\", position + Vector3(0,1.1,0), 1) + risen = true + +func reset(_discard): + risen = false + position = start_position +" + +[sub_resource type="BoxShape3D" id="BoxShape3D_gim5a"] +size = Vector3(1, 0.305693, 0.775269) + [node name="youth room" type="Node3D"] script = ExtResource("1_aitp0") @@ -540,13 +578,89 @@ shadow_enabled = true spot_angle = 42.8718 script = SubResource("GDScript_xqa3d") -[node name="CSGCombiner3D" type="CSGCombiner3D" parent="."] +[node name="Blockout" type="CSGCombiner3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.811571, 0, 0) +visible = false use_collision = true -[node name="CSGBox3D" type="CSGBox3D" parent="CSGCombiner3D"] +[node name="Floor" type="CSGBox3D" parent="Blockout"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.931684, -0.12195, 0.721855) size = Vector3(5.75304, 0.238875, 4.229) +[node name="Wall1" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.09251, 1.18903, 2.10151) +size = Vector3(2.02493, 2.13981, 1) + +[node name="Wall2" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.12438, 1.18903, 2.10151) +size = Vector3(1.11794, 2.13981, 1) + +[node name="Wall3" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.692784, 1.18903, 2.51779) +size = Vector3(1.97467, 2.13981, 1) + +[node name="Wall4" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0505961, 1.18903, -2.27114) +size = Vector3(5.49963, 2.13981, 1) + +[node name="Wall5" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 2.41253, 1.18903, 1.10946) +size = Vector3(2.02493, 2.13981, 1) + +[node name="Wall6" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 1.69649, 1.62974, -0.736064) +size = Vector3(2.02493, 1.06586, 1) + +[node name="Wall7" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(-6.06896e-08, 0, 1, 0, 1, 0, -1.38842, 0, -4.37114e-08, 2.94248, 0.554825, -0.893607) +size = Vector3(2.02493, 1.06586, 1) + +[node name="Pillar" type="CSGBox3D" parent="Blockout/Floor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.340459, 1.18903, 0.542746) +size = Vector3(0.25896, 2.51771, 0.244169) + +[node name="wardrobe" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(0.998323, 0, -0.0578951, 0, 1, 0, 0.0578951, 0, 0.998323, -1.65267, 1.06708, -0.295834) +size = Vector3(0.690756, 2.51771, 1.74006) + +[node name="desk" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(1.1474, 0, 0, 0, 1, 0, 0, 0, 1, -1.33503, 0.250741, 1.47367) +size = Vector3(0.690756, 1.04931, 1.74006) + +[node name="beanBag1" type="CSGSphere3D" parent="Blockout"] +transform = Transform3D(0.930761, 0, 0, 0, 0.811193, 0, 0, 0, 0.811193, -0.693896, 0.11103, 2.36695) + +[node name="beanBag2" type="CSGSphere3D" parent="Blockout"] +transform = Transform3D(0.930761, 0, 0, 0, 0.811193, 0, 0, 0, 0.811193, 1.4977, 0.222592, 0.667055) +radius = 0.442542 + +[node name="shelf" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(1.50675, 0, 0.113429, 0, 1.21197, 0, -0.0247126, 0, 1.59021, 1.22435, 0.523912, -0.31202) +size = Vector3(0.334722, 1, 1) + +[node name="shelf2" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(1.51977, 0, -0.268689, 0, 1.21197, 0, 0.299637, 0, 1.90867, 2.65587, 0.308069, 1.91858) +size = Vector3(0.334722, 1, 0.709023) + +[node name="bed" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(3.88154, 0, 0.183517, 0, 1.21197, 0, -0.063662, 0, 2.5728, 2.04986, 0.939937, -0.31202) +size = Vector3(0.334722, 0.208577, 1) + +[node name="seat" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(1.37974, 0, -0.560171, 0, 0.811194, 0, 0.605992, 0, 1.4926, 0.581465, 0.266536, -0.762094) +size = Vector3(0.548618, 1, 0.313878) + +[node name="CSGBox3D2" type="CSGBox3D" parent="Blockout/seat"] +transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -3.27826e-07, 0, 0.999999, 0.0905743, -0.552749, 0.233639) +size = Vector3(0.447724, 1, 0.329058) + +[node name="CSGSphere3D" type="CSGSphere3D" parent="Blockout/seat"] +transform = Transform3D(1, 0, 5.96046e-08, 0, 1.34598, 0, -6.55651e-07, 0, 0.999999, 0.0164497, -0.711718, 0.294858) + +[node name="ladder" type="CSGBox3D" parent="Blockout"] +transform = Transform3D(0.629683, 0.289502, 0, -0.297919, 0.611894, 0, 0, 0, 1.8813, 1.23808, 0.491789, 0.746785) +size = Vector3(0.180483, 1.62661, 0.160638) + [node name="OmniLight3D2" type="OmniLight3D" parent="."] transform = Transform3D(-0.477862, -0.663484, 0.575705, -0.860239, 0.220753, -0.459626, 0.177866, -0.714882, -0.676245, 3.15688, 0.480778, 0.0648447) light_size = 0.1 @@ -559,7 +673,7 @@ libraries = { "": SubResource("AnimationLibrary_k8op5") } -[node name="PlayerController" parent="." instance=ExtResource("3_foj4y")] +[node name="PlayerController" parent="." groups=["camera_owner"] instance=ExtResource("3_foj4y")] transform = Transform3D(0.686123, 0, 0.727485, 0, 1, 0, -0.727485, 0, 0.686123, 1.14815, 1.19209e-07, 0.730062) active = false @@ -605,7 +719,7 @@ offset_right = 40.0 offset_bottom = 23.0 text = "n out of 3 Memories collected" -[node name="Collectable" type="Area3D" parent="."] +[node name="Collectable" type="Area3D" parent="." groups=["collectables"]] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.940637, 1.34703, 0.817837) collision_layer = 16 @@ -634,6 +748,136 @@ render_target_update_mode = 4 [node name="DisplayMenu" type="CollisionShape3D" parent="Collectable"] shape = SubResource("CapsuleShape3D_72g2i") +[node name="Exit" type="Area3D" parent="." groups=["exit"]] +transform = Transform3D(1, 0, 1.06581e-14, 0, 1, 0, -1.06581e-14, 0, 1, 0.13754, 1.34703, -0.95778) +collision_layer = 16 + +[node name="Collectable_ui" type="Area3D" parent="Exit"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -2.38419e-07, 0, 0.071894) +script = ExtResource("11_7uxd8") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Exit/Collectable_ui"] +transform = Transform3D(2.56, 0, 7.10543e-14, 0, 2.56, 0, -7.10543e-14, 0, 2.56, 0, 0, 0.238397) +shape = SubResource("BoxShape3D_cb3g8") + +[node name="Sprite3D" type="Sprite3D" parent="Exit/Collectable_ui"] +transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) +pixel_size = 0.015 +no_depth_test = true +texture = SubResource("ViewportTexture_gwx6q") + +[node name="SubViewport" type="SubViewport" parent="Exit/Collectable_ui/Sprite3D"] +transparent_bg = true +size = Vector2i(300, 350) +render_target_update_mode = 4 + +[node name="Label" type="Label" parent="Exit/Collectable_ui/Sprite3D/SubViewport"] +offset_right = 40.0 +offset_bottom = 23.0 +text = "you may not exit now, three are still things to pack." + +[node name="DisplayMenu" type="CollisionShape3D" parent="Exit"] +shape = SubResource("CapsuleShape3D_72g2i") + +[node name="Board" type="Area3D" parent="." groups=["exit"]] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -0.995796, 1.30696, 1.71915) +collision_layer = 16 + +[node name="Collectable_ui" type="Area3D" parent="Board"] +transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -2.38419e-07, 0, 0.071894) +script = ExtResource("11_7uxd8") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Board/Collectable_ui"] +transform = Transform3D(2.56, 0, 7.10543e-14, 0, 2.56, 0, -7.10543e-14, 0, 2.56, 0, 0, 0.238397) +shape = SubResource("BoxShape3D_cb3g8") + +[node name="Sprite3D" type="Sprite3D" parent="Board/Collectable_ui"] +transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758) +pixel_size = 0.015 +no_depth_test = true +texture = SubResource("ViewportTexture_gwx6q") + +[node name="SubViewport" type="SubViewport" parent="Board/Collectable_ui/Sprite3D"] +transparent_bg = true +size = Vector2i(300, 350) +render_target_update_mode = 4 + +[node name="Label" type="Label" parent="Board/Collectable_ui/Sprite3D/SubViewport"] +offset_right = 40.0 +offset_bottom = 23.0 +text = "This is the Card Board." + +[node name="DisplayMenu" type="CollisionShape3D" parent="Board"] +shape = SubResource("CapsuleShape3D_72g2i") + +[node name="Bed and Ladders" type="Node3D" parent="."] + +[node name="ladder_trigger" type="Area3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.84538, 0, 0.803611) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/ladder_trigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.170028, 0.244833, -0.0455775) +shape = SubResource("CapsuleShape3D_f1g8m") + +[node name="ladder_reset" type="Area3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.84538, 0, 0.803611) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/ladder_reset"] +transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0.916567, 1.64525, -1.14479) +shape = SubResource("CapsuleShape3D_kewqg") + +[node name="bed_enter" type="Area3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.20255, 0, 0.547867) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/bed_enter"] +transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0, 0, 0) +shape = SubResource("CapsuleShape3D_k4x40") + +[node name="bed_reset" type="Area3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.08894, 0, 0.00684631) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/bed_reset"] +transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0.107988, 1.56575e-08, -0.358201) +shape = SubResource("CapsuleShape3D_4q8vc") + +[node name="reset_failover" type="Area3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.08894, 0, 0.272245) +collision_layer = 2 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/reset_failover"] +transform = Transform3D(0.995341, 0.096419, 0, 4.21461e-09, -4.35077e-08, -1, -0.096419, 0.995341, -4.37114e-08, 0, 0, 0) +shape = SubResource("CapsuleShape3D_n20ff") + +[node name="ladder" type="StaticBody3D" parent="Bed and Ladders"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.77546, 0, 0.720878) +script = SubResource("GDScript_uyt24") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bed and Ladders/ladder"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.336261, -0.199846, 0.0549462) +shape = SubResource("BoxShape3D_gim5a") + [connection signal="mouse_entered" from="Collectable" to="Collectable/Collectable_ui" method="show"] [connection signal="mouse_entered" from="Collectable" to="Collectable/DisplayMenu" method="set_disabled" binds= [true]] [connection signal="input_event" from="Collectable/Collectable_ui" to="Collectable/Collectable_ui" method="_on_input_event" flags=18] +[connection signal="mouse_entered" from="Exit" to="Exit/Collectable_ui" method="show"] +[connection signal="mouse_entered" from="Exit" to="Exit/DisplayMenu" method="set_disabled"] +[connection signal="input_event" from="Exit/Collectable_ui" to="Exit/Collectable_ui" method="_on_input_event" flags=18] +[connection signal="mouse_entered" from="Board" to="Board/Collectable_ui" method="show"] +[connection signal="mouse_entered" from="Board" to="Board/DisplayMenu" method="set_disabled"] +[connection signal="input_event" from="Board/Collectable_ui" to="Board/Collectable_ui" method="_on_input_event" flags=18] +[connection signal="body_entered" from="Bed and Ladders/ladder_trigger" to="PlayerController" method="_on_bed_enter"] +[connection signal="body_entered" from="Bed and Ladders/ladder_trigger" to="Bed and Ladders/ladder" method="raise"] +[connection signal="body_exited" from="Bed and Ladders/ladder_reset" to="PlayerController" method="_on_bed_exit"] +[connection signal="body_exited" from="Bed and Ladders/ladder_reset" to="Bed and Ladders/ladder" method="reset"] +[connection signal="body_entered" from="Bed and Ladders/bed_enter" to="PlayerController" method="_on_bed_enter"] +[connection signal="body_exited" from="Bed and Ladders/bed_reset" to="PlayerController" method="_on_bed_exit"] +[connection signal="body_exited" from="Bed and Ladders/reset_failover" to="PlayerController" method="_on_bed_exit"] diff --git a/src/dev-util/particles_tester.tscn b/src/dev-util/particles_tester.tscn new file mode 100644 index 0000000..cf94427 --- /dev/null +++ b/src/dev-util/particles_tester.tscn @@ -0,0 +1,174 @@ +[gd_scene load_steps=14 format=3 uid="uid://bj3tbkmppabfq"] + +[ext_resource type="Shader" path="res://vfx/particle_mixer.gdshader" id="1_g8u1t"] +[ext_resource type="Texture2D" uid="uid://dq7jm5ufknbb6" path="res://vfx/lens-flare-particle.png" id="2_mi0wa"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_lpenh"] +render_priority = 0 +shader = ExtResource("1_g8u1t") +shader_parameter/particle_color = null +shader_parameter/particle_texture = ExtResource("2_mi0wa") + +[sub_resource type="Gradient" id="Gradient_tjuvm"] +offsets = PackedFloat32Array(0, 0.50813, 1) +colors = PackedColorArray(1, 0.877403, 0.516545, 1, 0.94702, 0.505309, 0.59484, 1, 0.735853, 0.324231, 0.687053, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_d2t20"] +gradient = SubResource("Gradient_tjuvm") + +[sub_resource type="Gradient" id="Gradient_c8r4y"] +offsets = PackedFloat32Array(0, 0.00813008, 0.52439, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.0284553, 0.0284553, 0.0284553, 1, 0.244776, 0.244776, 0.244776, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_2vogp"] +gradient = SubResource("Gradient_c8r4y") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_eegys"] +emission_shape = 1 +emission_sphere_radius = 0.3 +spread = 180.0 +gravity = Vector3(0, 0.02, 0) +initial_velocity_max = 0.2 +color_ramp = SubResource("GradientTexture1D_2vogp") +color_initial_ramp = SubResource("GradientTexture1D_d2t20") +turbulence_enabled = true +turbulence_noise_strength = 0.1 +turbulence_noise_scale = 2.0 +turbulence_noise_speed = Vector3(0.1, 0.3, 0.5) +turbulence_noise_speed_random = 0.3 +turbulence_influence_min = 0.01 +turbulence_influence_max = 0.03 +turbulence_initial_displacement_max = 1.0 + +[sub_resource type="Shader" id="Shader_p2314"] +code = "// NOTE: Shader automatically converted from Godot Engine 4.0.stable's StandardMaterial3D. + +shader_type spatial; +render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_burley,specular_disabled; +uniform vec4 albedo : source_color; +uniform sampler2D texture_albedo : source_color,filter_linear_mipmap,repeat_enable; +uniform float point_size : hint_range(0,128); +uniform float roughness : hint_range(0,1); +uniform sampler2D texture_metallic : hint_default_white,filter_linear_mipmap,repeat_enable; +uniform vec4 metallic_texture_channel; +uniform sampler2D texture_roughness : hint_roughness_r,filter_linear_mipmap,repeat_enable; +uniform float specular; +uniform float metallic; +uniform int particles_anim_h_frames; +uniform int particles_anim_v_frames; +uniform bool particles_anim_loop; +uniform vec4 backlight : source_color; +uniform sampler2D texture_backlight : hint_default_black,filter_linear_mipmap,repeat_enable; +uniform vec3 uv1_scale; +uniform vec3 uv1_offset; +uniform vec3 uv2_scale; +uniform vec3 uv2_offset; + + +void vertex() { + UV=UV*uv1_scale.xy+uv1_offset.xy; + mat4 mat_world = mat4(normalize(INV_VIEW_MATRIX[0]), normalize(INV_VIEW_MATRIX[1]) ,normalize(INV_VIEW_MATRIX[2]), MODEL_MATRIX[3]); + mat_world = mat_world * mat4(vec4(cos(INSTANCE_CUSTOM.x), -sin(INSTANCE_CUSTOM.x), 0.0, 0.0), vec4(sin(INSTANCE_CUSTOM.x), cos(INSTANCE_CUSTOM.x), 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0)); + MODELVIEW_MATRIX = VIEW_MATRIX * mat_world; + MODELVIEW_NORMAL_MATRIX = mat3(MODELVIEW_MATRIX); + float h_frames = float(particles_anim_h_frames); + float v_frames = float(particles_anim_v_frames); + float particle_total_frames = float(particles_anim_h_frames * particles_anim_v_frames); + float particle_frame = floor(INSTANCE_CUSTOM.z * float(particle_total_frames)); + if (!particles_anim_loop) { + particle_frame = clamp(particle_frame, 0.0, particle_total_frames - 1.0); + } else { + particle_frame = mod(particle_frame, particle_total_frames); + } + UV /= vec2(h_frames, v_frames); + UV += vec2(mod(particle_frame, h_frames) / h_frames, floor((particle_frame + 0.5) / h_frames) / v_frames); +} + + + + + + +void fragment() { + vec2 base_uv = UV; + vec4 albedo_tex = texture(texture_albedo,base_uv); + albedo_tex *= COLOR; + ALBEDO = albedo.rgb * albedo_tex.rgb; + float metallic_tex = dot(texture(texture_metallic,base_uv),metallic_texture_channel); + METALLIC = metallic_tex * metallic; + vec4 roughness_texture_channel = vec4(1.0,0.0,0.0,0.0); + float roughness_tex = dot(texture(texture_roughness,base_uv),roughness_texture_channel); + ROUGHNESS = roughness_tex * roughness; + SPECULAR = specular; + vec3 backlight_tex = texture(texture_backlight,base_uv).rgb; + BACKLIGHT = (backlight.rgb+backlight_tex); +} +" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fgrmi"] +render_priority = 0 +shader = SubResource("Shader_p2314") +shader_parameter/albedo = Color(1, 1, 1, 1) +shader_parameter/point_size = 1.0 +shader_parameter/roughness = 1.0 +shader_parameter/metallic_texture_channel = Plane(1, 0, 0, 0) +shader_parameter/specular = 0.5 +shader_parameter/metallic = 0.0 +shader_parameter/particles_anim_h_frames = 1 +shader_parameter/particles_anim_v_frames = 1 +shader_parameter/particles_anim_loop = false +shader_parameter/backlight = Color(0, 0, 0, 1) +shader_parameter/uv1_scale = Vector3(1, 1, 1) +shader_parameter/uv1_offset = Vector3(0, 0, 0) +shader_parameter/uv2_scale = Vector3(1, 1, 1) +shader_parameter/uv2_offset = Vector3(0, 0, 0) +shader_parameter/texture_albedo = ExtResource("2_mi0wa") +shader_parameter/texture_backlight = ExtResource("2_mi0wa") + +[sub_resource type="QuadMesh" id="QuadMesh_ea2fp"] +material = SubResource("ShaderMaterial_fgrmi") +size = Vector2(0.1, 0.1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xd7ns"] +specular_mode = 2 +vertex_color_use_as_albedo = true +albedo_texture = ExtResource("2_mi0wa") +backlight_enabled = true +backlight_texture = ExtResource("2_mi0wa") +billboard_mode = 3 +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_coqla"] +blend_mode = 1 +albedo_color = Color(0, 0, 0, 1) +metallic_specular = 1.0 + +[node name="Node3D" type="Node3D"] + +[node name="collectable_particles" type="GPUParticles3D" parent="."] +material_override = SubResource("ShaderMaterial_lpenh") +material_overlay = SubResource("ShaderMaterial_lpenh") +cast_shadow = 0 +amount = 100 +lifetime = 10.0 +process_material = SubResource("ParticleProcessMaterial_eegys") +draw_pass_1 = SubResource("QuadMesh_ea2fp") + +[node name="CSGBox3D" type="CSGBox3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2.66951) +size = Vector3(1, 1, 2.7375) +material = SubResource("StandardMaterial3D_xd7ns") + +[node name="CSGSphere3D" type="CSGSphere3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.81792, 0, 0) +material = SubResource("StandardMaterial3D_coqla") + +[node name="CSGSphere3D2" type="CSGSphere3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.157, -1.19209e-07, 0.894892) +material = SubResource("StandardMaterial3D_coqla") + +[node name="Camera3D" type="Camera3D" parent="CSGSphere3D2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.61871) +fov = 33.6 diff --git a/src/dev-util/testing.tscn b/src/dev-util/testing.tscn new file mode 100644 index 0000000..2ead5fd --- /dev/null +++ b/src/dev-util/testing.tscn @@ -0,0 +1,5 @@ +[gd_scene format=3 uid="uid://bigr0lnen1xdh"] + +[node name="Node3D" type="Node3D"] + +[node name="Node3D" type="Node3D" parent="."] diff --git a/src/vfx/collectable_particles.tscn b/src/vfx/collectable_particles.tscn new file mode 100644 index 0000000..f75ebb7 --- /dev/null +++ b/src/vfx/collectable_particles.tscn @@ -0,0 +1,30 @@ +[gd_scene load_steps=4 format=3 uid="uid://bdnesuqroi7ss"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nbr3v"] +blend_mode = 1 +billboard_mode = 3 +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_d61lg"] +emission_shape = 1 +emission_sphere_radius = 1.0 +spread = 180.0 +gravity = Vector3(0, 1, 0) +initial_velocity_min = 0.2 +initial_velocity_max = 1.0 +turbulence_enabled = true +turbulence_noise_speed = Vector3(0.1, 0.3, 0.5) +turbulence_noise_speed_random = 0.3 +turbulence_influence_min = 0.05 +turbulence_initial_displacement_max = 1.0 + +[sub_resource type="QuadMesh" id="QuadMesh_ea2fp"] + +[node name="collectable_particles" type="GPUParticles3D"] +material_override = SubResource("StandardMaterial3D_nbr3v") +amount = 30 +lifetime = 10.0 +process_material = SubResource("ParticleProcessMaterial_d61lg") +draw_pass_1 = SubResource("QuadMesh_ea2fp") diff --git a/src/vfx/lens-flare-particle.png b/src/vfx/lens-flare-particle.png new file mode 100644 index 0000000..cb52a88 Binary files /dev/null and b/src/vfx/lens-flare-particle.png differ diff --git a/src/vfx/lens-flare-particle.png.import b/src/vfx/lens-flare-particle.png.import new file mode 100644 index 0000000..72161fe --- /dev/null +++ b/src/vfx/lens-flare-particle.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dq7jm5ufknbb6" +path.s3tc="res://.godot/imported/lens-flare-particle.png-977dfc4c080000604387722f4a049ecd.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://vfx/lens-flare-particle.png" +dest_files=["res://.godot/imported/lens-flare-particle.png-977dfc4c080000604387722f4a049ecd.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +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=0 diff --git a/src/vfx/particle_mixer.gdshader b/src/vfx/particle_mixer.gdshader new file mode 100644 index 0000000..6f2f6c5 --- /dev/null +++ b/src/vfx/particle_mixer.gdshader @@ -0,0 +1,22 @@ +shader_type spatial; + +render_mode blend_add, specular_disabled; + +uniform sampler2D particle_texture; +uniform vec4 particle_color : source_color; + +void vertex() { + mat4 mat_world = mat4(normalize(INV_VIEW_MATRIX[0]), normalize(INV_VIEW_MATRIX[1]) ,normalize(INV_VIEW_MATRIX[2]), MODEL_MATRIX[3]); + mat_world = mat_world * mat4(vec4(cos(INSTANCE_CUSTOM.x), -sin(INSTANCE_CUSTOM.x), 0.0, 0.0), vec4(sin(INSTANCE_CUSTOM.x), cos(INSTANCE_CUSTOM.x), 0.0, 0.0), vec4(0.0, 0.0, 1.0, 0.0), vec4(0.0, 0.0, 0.0, 1.0)); + MODELVIEW_MATRIX = VIEW_MATRIX * mat_world; + MODELVIEW_NORMAL_MATRIX = mat3(MODELVIEW_MATRIX); + UV += vec2(float(INSTANCE_ID%2), float(INSTANCE_ID/2%2)); +} + +void fragment() { + ALBEDO = texture(particle_texture,UV/2.0).xyz * COLOR.xyz; + EMISSION = ALBEDO/8.0; + BACKLIGHT = ALBEDO; + SPECULAR = 0.0; +} +