feat(particles): bubble trail behind dolphin + block break burst

- BubbleTrail.gd: GPUParticles3D, auto-configured in _ready, set_intensity() API
- BlockBreakParticles.gd: one_shot burst, emit_burst(pos, color) API
- DolphinController.gd: bubble_trail onready + speed_factor hook in _update_movement
- Dolphin.tscn: BubbleEmitterPoint (0,0,1.2) > BubbleTrail child added

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Floppyrj45
2026-04-19 18:09:21 +02:00
parent cafdb7d27e
commit a8341355e3
12 changed files with 318 additions and 58 deletions

View File

@@ -1,8 +1,9 @@
[gd_scene load_steps=22 format=3 uid="uid://dolphin_main"]
[gd_scene load_steps=24 format=3 uid="uid://dolphin_main"]
[ext_resource type="Script" path="res://scripts/dolphin/DolphinController.gd" id="1_controller"]
[ext_resource type="Script" path="res://scripts/dolphin/HUD.gd" id="2_hud"]
[ext_resource type="Script" path="res://scripts/dolphin/EcholocationPulse.gd" id="3_echo"]
[ext_resource type="Script" path="res://scripts/dolphin/BubbleTrail.gd" id="4_bubble_trail"]
[sub_resource type="CapsuleShape3D" id="1_colshape"]
radius = 0.4
@@ -98,6 +99,12 @@ rotation = Vector3(0, 3.14159, 0)
[node name="Camera" type="Camera3D" parent="CameraPivot/SpringArm"]
[node name="BubbleEmitterPoint" type="Node3D" parent="."]
position = Vector3(0, 0, 1.2)
[node name="BubbleTrail" type="GPUParticles3D" parent="BubbleEmitterPoint"]
script = ExtResource("4_bubble_trail")
[node name="EcholocationPulse" type="Node3D" parent="."]
script = ExtResource("3_echo")

19
scenes/WaterSurface.tscn Normal file
View File

@@ -0,0 +1,19 @@
[gd_scene load_steps=3 format=3 uid="uid://dauphincraft_watersurface"]
[ext_resource type="Shader" path="res://shaders/water_surface.gdshader" id="1_watersh"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_water"]
shader = ExtResource("1_watersh")
shader_parameter/surface_color = Vector3(0.15, 0.45, 0.65)
shader_parameter/wave_speed = 0.3
shader_parameter/wave_amplitude = 0.15
[sub_resource type="PlaneMesh" id="PlaneMesh_water"]
size = Vector2(2000, 2000)
subdivide_width = 64
subdivide_depth = 64
[node name="WaterSurface" type="MeshInstance3D"]
position = Vector3(0, 60, 0)
mesh = SubResource("PlaneMesh_water")
material_override = SubResource("ShaderMaterial_water")