generated from krampus/template-godot4
Alarm pulse animation
This commit is contained in:
parent
37a3e2e90a
commit
3fb8a54b42
Binary file not shown.
Binary file not shown.
BIN
assets/grunk/alarm/alarm_core_E.png
(Stored with Git LFS)
Normal file
BIN
assets/grunk/alarm/alarm_core_E.png
(Stored with Git LFS)
Normal file
Binary file not shown.
34
assets/grunk/alarm/alarm_core_E.png.import
Normal file
34
assets/grunk/alarm/alarm_core_E.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://vvcv5kyi4jvl"
|
||||
path="res://.godot/imported/alarm_core_E.png-6e652d56d7fcc875e433f96b391d744d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/grunk/alarm/alarm_core_E.png"
|
||||
dest_files=["res://.godot/imported/alarm_core_E.png-6e652d56d7fcc875e433f96b391d744d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
@ -7,15 +7,14 @@ const ALERT_DELTA := 1
|
||||
const JITTER_SCALE_FACTOR := 0.15
|
||||
const JITTER_INFLATION_FACTOR := 1.5
|
||||
|
||||
## Time to wait for a pulse signal before triggering.
|
||||
@export var pulse_timeout := 6.0
|
||||
|
||||
var _busy := false
|
||||
|
||||
@onready var pulse_listener_timer: Timer = %PulseListenerTimer
|
||||
@onready var animation_player: AnimationPlayer = $FrameSkipper/AlarmMesh/AnimationPlayer
|
||||
@onready var effect_animation: AnimationPlayer = %EffectAnimation
|
||||
@onready var bud: MeshInstance3D = $FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud
|
||||
@onready var animation_player: AnimationPlayer = $FrameSkipper/Rumbler3D/AlarmMesh/AnimationPlayer
|
||||
@onready var trigger_animation: AnimationPlayer = %TriggerAnimation
|
||||
@onready var pulse_animation: AnimationPlayer = %PulseAnimation
|
||||
|
||||
@onready var bud: MeshInstance3D = $FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud
|
||||
@onready var alarm_sfx: AudioStreamPlayer3D = %AlarmSFX
|
||||
|
||||
|
||||
@ -27,7 +26,7 @@ func trigger() -> void:
|
||||
_busy = true
|
||||
Game.manager.raise_alert(ALERT_DELTA)
|
||||
animation_player.play("trigger")
|
||||
effect_animation.play("trigger")
|
||||
trigger_animation.play("trigger")
|
||||
alarm_sfx.play()
|
||||
|
||||
|
||||
@ -36,7 +35,8 @@ func trigger() -> void:
|
||||
## Note that alarms will not begin the pulse countdown until receiving the first pulse.
|
||||
## On networks without a heart, the pulse timeout will be completely ignored.
|
||||
func pulse() -> void:
|
||||
pulse_listener_timer.start(pulse_timeout)
|
||||
pulse_animation.seek(0)
|
||||
pulse_animation.play("pulse")
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=12 format=3 uid="uid://dgeg3kkogm71m"]
|
||||
[gd_scene load_steps=16 format=3 uid="uid://dgeg3kkogm71m"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://djb5tabjcvwkt" path="res://src/world/mechanics/alarm/gunk_alarm.gd" id="1_piaxx"]
|
||||
[ext_resource type="PackedScene" uid="uid://60ks4l42qxia" path="res://assets/grunk/alarm/alarm.gltf" id="2_6vdvf"]
|
||||
[ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_gujky"]
|
||||
[ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_g4yos"]
|
||||
[ext_resource type="Script" uid="uid://b274q7uvn0cvp" path="res://src/ui/rumbler_3d.gd" id="3_vokcn"]
|
||||
[ext_resource type="Material" uid="uid://cdpvcruywnp4x" path="res://assets/grunk/alarm/alarm_core.material" id="5_6vdvf"]
|
||||
[ext_resource type="AudioStream" uid="uid://ypk1d4adrcs" path="res://assets/sfx/grunk/alarm_screech.wav" id="6_6vdvf"]
|
||||
|
||||
@ -12,7 +13,7 @@ length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color")
|
||||
tracks/0/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
@ -24,7 +25,7 @@ tracks/0/keys = {
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength")
|
||||
tracks/1/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
@ -40,7 +41,7 @@ length = 10.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color")
|
||||
tracks/0/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_color")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
@ -52,7 +53,7 @@ tracks/0/keys = {
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength")
|
||||
tracks/1/path = NodePath("FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/0:shader_parameter/emission_strength")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
@ -68,6 +69,171 @@ _data = {
|
||||
&"trigger": SubResource("Animation_6vdvf")
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_vokcn"]
|
||||
resource_name = "pulse"
|
||||
length = 9.0
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = false
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.166667, 3.5, 6, 9),
|
||||
"transitions": PackedFloat32Array(1.618, 0.618, 4, 0.554785, 1),
|
||||
"update": 0,
|
||||
"values": [0.02, 2.0, 0.0, 40.0, 0.02]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = false
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 1.6, 1.63333, 8.5, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(0.25098, 0.878431, 1, 1), Color(0.25098, 0.878431, 1, 1), Color(1, 0.25098, 0.262745, 1), Color(1, 0.25098, 0.262745, 1), Color(0.25098, 0.878431, 1, 1)]
|
||||
}
|
||||
tracks/2/type = "method"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("..")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(6),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"values": [{
|
||||
"args": [],
|
||||
"method": &"trigger"
|
||||
}]
|
||||
}
|
||||
tracks/3/type = "bezier"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:x")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0, -0.00028199, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.166667, 0.966667, 2.2, 6, 9)
|
||||
}
|
||||
tracks/4/type = "bezier"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:y")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.4, 1.2, 2.2, 6, 9)
|
||||
}
|
||||
tracks/5/type = "bezier"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Rumbler3D/AlarmMesh:scale:z")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0, 0, 1.05, -0.15, 0, 0.25, 0, 1, -0.4, -0.05, 0.25, 0.05, 1, -0.25, -0.025, 0.095, 0.01, 0.9, 0, 0.1, 0, 0.25, 1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0, 0.633333, 1.43333, 2.2, 6, 9)
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("Rumbler3D:intensity")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(3.5, 6, 9),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [0.0, 0.002, 0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_bknln"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.02]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(0.25098, 0.878431, 1, 1)]
|
||||
}
|
||||
tracks/2/type = "bezier"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Rumbler3D/AlarmMesh:scale:x")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/3/type = "bezier"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:y")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/4/type = "bezier"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:z")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"handle_modes": PackedInt32Array(0),
|
||||
"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0),
|
||||
"times": PackedFloat32Array(0)
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("Rumbler3D:intensity")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [0.0]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_bknln"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_bknln"),
|
||||
&"pulse": SubResource("Animation_vokcn")
|
||||
}
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_b6er8"]
|
||||
radius = 0.285
|
||||
height = 0.44
|
||||
@ -88,11 +254,15 @@ metadata/_custom_type_script = "uid://bypgxi0gy56yk"
|
||||
[node name="FrameSkipper" type="Node3D" parent="."]
|
||||
script = ExtResource("2_gujky")
|
||||
|
||||
[node name="AlarmMesh" parent="FrameSkipper" instance=ExtResource("2_6vdvf")]
|
||||
[node name="Rumbler3D" type="Node3D" parent="FrameSkipper"]
|
||||
script = ExtResource("3_vokcn")
|
||||
metadata/_custom_type_script = "uid://b274q7uvn0cvp"
|
||||
|
||||
[node name="AlarmMesh" parent="FrameSkipper/Rumbler3D" instance=ExtResource("2_6vdvf")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.035, 0)
|
||||
|
||||
[node name="Skeleton3D" parent="FrameSkipper/AlarmMesh/Armature" index="0"]
|
||||
[node name="Skeleton3D" parent="FrameSkipper/Rumbler3D/AlarmMesh/Armature" index="0"]
|
||||
bones/1/rotation = Quaternion(0.615412, 8.96411e-08, 6.99896e-08, 0.788205)
|
||||
bones/2/rotation = Quaternion(6.23537e-08, 0.911935, -0.410335, 6.88492e-08)
|
||||
bones/3/rotation = Quaternion(0.388328, -7.55108e-08, -2.12852e-09, 0.921521)
|
||||
@ -121,15 +291,15 @@ bones/26/rotation = Quaternion(-8.38833e-08, 0.911935, -0.410335, -6.97367e-08)
|
||||
bones/27/rotation = Quaternion(0.388328, 2.1633e-07, -1.09183e-07, 0.921521)
|
||||
bones/28/rotation = Quaternion(0.362943, -7.93195e-08, 1.03952e-07, 0.931811)
|
||||
|
||||
[node name="Bud" parent="FrameSkipper/AlarmMesh/Armature/Skeleton3D" index="0"]
|
||||
[node name="Bud" parent="FrameSkipper/Rumbler3D/AlarmMesh/Armature/Skeleton3D" index="0"]
|
||||
gi_mode = 2
|
||||
surface_material_override/0 = ExtResource("3_g4yos")
|
||||
surface_material_override/1 = ExtResource("5_6vdvf")
|
||||
|
||||
[node name="AnimationPlayer" parent="FrameSkipper/AlarmMesh" index="1"]
|
||||
[node name="AnimationPlayer" parent="FrameSkipper/Rumbler3D/AlarmMesh" index="1"]
|
||||
speed_scale = 7.4
|
||||
|
||||
[node name="EffectAnimation" type="AnimationPlayer" parent="FrameSkipper"]
|
||||
[node name="TriggerAnimation" type="AnimationPlayer" parent="FrameSkipper"]
|
||||
unique_name_in_owner = true
|
||||
root_node = NodePath("../..")
|
||||
libraries = {
|
||||
@ -137,6 +307,13 @@ libraries = {
|
||||
}
|
||||
speed_scale = 7.4
|
||||
|
||||
[node name="PulseAnimation" type="AnimationPlayer" parent="FrameSkipper"]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
&"": SubResource("AnimationLibrary_bknln")
|
||||
}
|
||||
speed_scale = 2.0
|
||||
|
||||
[node name="CollisionMesh" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.906308, 0, -0.422618, 0, 1, 0, 0.422618, 0, 0.906308, 0, 0.2, 0)
|
||||
visible = false
|
||||
@ -155,7 +332,7 @@ unique_name_in_owner = true
|
||||
stream = ExtResource("6_6vdvf")
|
||||
pitch_scale = 1.1
|
||||
|
||||
[connection signal="animation_finished" from="FrameSkipper/AlarmMesh/AnimationPlayer" to="." method="_on_animation_finished"]
|
||||
[connection signal="animation_finished" from="FrameSkipper/Rumbler3D/AlarmMesh/AnimationPlayer" to="." method="_on_animation_finished"]
|
||||
[connection signal="timeout" from="PulseListenerTimer" to="." method="trigger"]
|
||||
|
||||
[editable path="FrameSkipper/AlarmMesh"]
|
||||
[editable path="FrameSkipper/Rumbler3D/AlarmMesh"]
|
||||
|
Loading…
x
Reference in New Issue
Block a user