Files
dauphincraft/scenes/Dolphin.tscn
Floppyrj45 a8341355e3 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>
2026-04-19 18:09:21 +02:00

184 lines
5.6 KiB
Plaintext

[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
height = 2.0
[sub_resource type="CapsuleMesh" id="2_body_mesh"]
radius = 0.4
height = 2.0
[sub_resource type="StandardMaterial3D" id="3_body_mat"]
albedo_color = Color(0.29, 0.478, 0.584, 1)
[sub_resource type="CapsuleMesh" id="4_belly_mesh"]
radius = 0.35
height = 1.6
[sub_resource type="StandardMaterial3D" id="5_belly_mat"]
albedo_color = Color(0.91, 0.933, 0.949, 1)
[sub_resource type="CapsuleMesh" id="6_tail_mesh"]
radius = 0.2
height = 0.9
[sub_resource type="StandardMaterial3D" id="7_tail_mat"]
albedo_color = Color(0.29, 0.478, 0.584, 1)
[sub_resource type="PrismMesh" id="8_fin_mesh"]
size = Vector3(0.15, 0.4, 0.08)
[sub_resource type="StandardMaterial3D" id="9_fin_mat"]
albedo_color = Color(0.29, 0.478, 0.584, 1)
[sub_resource type="CapsuleMesh" id="10_pec_mesh"]
radius = 0.1
height = 0.5
[sub_resource type="StandardMaterial3D" id="11_pec_mat"]
albedo_color = Color(0.29, 0.478, 0.584, 1)
[sub_resource type="StyleBoxFlat" id="12_panel_style"]
bg_color = Color(0.05, 0.05, 0.05, 0.7)
corner_radius_top_left = 10
corner_radius_top_right = 10
corner_radius_bottom_left = 10
corner_radius_bottom_right = 10
[node name="Dolphin" type="CharacterBody3D"]
script = ExtResource("1_controller")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("1_colshape")
[node name="DolphinBody" type="Node3D" parent="."]
rotation = Vector3(0, 0, 0)
[node name="Body" type="MeshInstance3D" parent="DolphinBody"]
rotation = Vector3(1.5708, 0, 0)
mesh = SubResource("2_body_mesh")
surface_material_override/0 = SubResource("3_body_mat")
[node name="Belly" type="MeshInstance3D" parent="DolphinBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.05, 0.15)
rotation = Vector3(1.5708, 0, 0)
mesh = SubResource("4_belly_mesh")
surface_material_override/0 = SubResource("5_belly_mat")
[node name="Tail" type="MeshInstance3D" parent="DolphinBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.1)
rotation = Vector3(1.5708, 0, 0)
mesh = SubResource("6_tail_mesh")
surface_material_override/0 = SubResource("7_tail_mat")
[node name="DorsalFin" type="MeshInstance3D" parent="DolphinBody"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.45, -0.1)
mesh = SubResource("8_fin_mesh")
surface_material_override/0 = SubResource("9_fin_mat")
[node name="PecFinLeft" type="MeshInstance3D" parent="DolphinBody"]
transform = Transform3D(1, 0, 0, 0, 0.866, -0.5, 0, 0.5, 0.866, -0.45, 0.0, 0.1)
mesh = SubResource("10_pec_mesh")
surface_material_override/0 = SubResource("11_pec_mat")
[node name="PecFinRight" type="MeshInstance3D" parent="DolphinBody"]
transform = Transform3D(1, 0, 0, 0, 0.866, 0.5, 0, -0.5, 0.866, 0.45, 0.0, 0.1)
mesh = SubResource("10_pec_mesh")
surface_material_override/0 = SubResource("11_pec_mat")
[node name="CameraPivot" type="Node3D" parent="."]
[node name="SpringArm" type="SpringArm3D" parent="CameraPivot"]
spring_length = 3.5
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")
[node name="HUD" type="CanvasLayer" parent="."]
script = ExtResource("2_hud")
[node name="Panel" type="PanelContainer" parent="HUD"]
anchors_preset = 0
anchor_left = 0.0
anchor_top = 1.0
anchor_right = 0.0
anchor_bottom = 1.0
offset_left = 16.0
offset_top = -160.0
offset_right = 220.0
offset_bottom = -16.0
theme_override_styles/panel = SubResource("12_panel_style")
[node name="VBox" type="VBoxContainer" parent="HUD/Panel"]
layout_mode = 2
theme_override_constants/separation = 8
offset_left = 10.0
offset_top = 10.0
offset_right = -10.0
offset_bottom = -10.0
[node name="OxygenRow" type="HBoxContainer" parent="HUD/Panel/VBox"]
layout_mode = 2
[node name="OxygenLabel" type="Label" parent="HUD/Panel/VBox/OxygenRow"]
layout_mode = 2
text = "O2:"
custom_minimum_size = Vector2(36, 0)
[node name="OxygenBar" type="ProgressBar" parent="HUD/Panel/VBox/OxygenRow"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
custom_minimum_size = Vector2(130, 18)
max_value = 100.0
value = 100.0
show_percentage = false
[node name="HealthRow" type="HBoxContainer" parent="HUD/Panel/VBox"]
layout_mode = 2
[node name="HealthLabel" type="Label" parent="HUD/Panel/VBox/HealthRow"]
layout_mode = 2
text = "HP:"
custom_minimum_size = Vector2(36, 0)
[node name="HealthBar" type="ProgressBar" parent="HUD/Panel/VBox/HealthRow"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
custom_minimum_size = Vector2(130, 18)
max_value = 100.0
value = 100.0
show_percentage = false
[node name="HungerRow" type="HBoxContainer" parent="HUD/Panel/VBox"]
layout_mode = 2
[node name="HungerLabel" type="Label" parent="HUD/Panel/VBox/HungerRow"]
layout_mode = 2
text = "Food:"
custom_minimum_size = Vector2(36, 0)
[node name="HungerBar" type="ProgressBar" parent="HUD/Panel/VBox/HungerRow"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
custom_minimum_size = Vector2(130, 18)
max_value = 100.0
value = 100.0
show_percentage = false