From 64bdc09b41319eb476f3b4f99075c65bed57c744 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Wed, 5 Mar 2025 17:57:55 -0700 Subject: [PATCH] the rumblerrrrrr --- src/player/player.gd | 3 ++ src/player/player.tscn | 23 +++++++---- src/props/wall_switch/wall_switch.tscn | 54 +++++++++++++------------- src/ui/rumbler.gd | 15 +++++++ src/ui/rumbler_3d.gd | 16 ++++++++ 5 files changed, 76 insertions(+), 35 deletions(-) create mode 100644 src/ui/rumbler.gd create mode 100644 src/ui/rumbler_3d.gd diff --git a/src/player/player.gd b/src/player/player.gd index ebdd812..fe99489 100644 --- a/src/player/player.gd +++ b/src/player/player.gd @@ -19,6 +19,7 @@ var firing := false @onready var camera_pivot: CameraController = %CameraPivot @onready var spray_muzzle: Marker3D = %SprayMuzzle +@onready var spray_rumbler: Rumbler3D = %SprayRumbler @onready var interact_ray: RayCast3D = %InteractRay @@ -51,9 +52,11 @@ func _physics_process(delta: float) -> void: if Input.is_action_pressed("fire"): get_spray().fire() firing = true + spray_rumbler.intensity = 0.002 else: get_spray().idle() firing = false + spray_rumbler.intensity *= 0.8 # Gravity if not is_on_floor(): diff --git a/src/player/player.tscn b/src/player/player.tscn index 7aec2d0..842c117 100644 --- a/src/player/player.tscn +++ b/src/player/player.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=8 format=3 uid="uid://bwe2jdmvinhqd"] +[gd_scene load_steps=9 format=3 uid="uid://bwe2jdmvinhqd"] [ext_resource type="Script" path="res://src/player/player.gd" id="1_npueo"] [ext_resource type="Script" path="res://src/player/camera_controller.gd" id="2_veeqv"] [ext_resource type="PackedScene" uid="uid://cc102xko0u6yj" path="res://src/equipment/point_spray/point_spray.tscn" id="3_6wgkm"] [ext_resource type="PackedScene" uid="uid://d2hnxr5l6w2x4" path="res://src/equipment/wide_spray/wide_spray.tscn" id="3_ibq07"] +[ext_resource type="Script" path="res://src/ui/rumbler_3d.gd" id="5_ipd7g"] [ext_resource type="PackedScene" uid="uid://dq1x21tq06dud" path="res://src/ui/hud/player_hud.tscn" id="5_jvafu"] [sub_resource type="BoxMesh" id="BoxMesh_ua7a2"] @@ -20,21 +21,27 @@ unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) script = ExtResource("2_veeqv") -[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot"] +[node name="SprayMount" type="Node3D" parent="CameraPivot"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.1, -0.1) -layers = 2 -mesh = SubResource("BoxMesh_ua7a2") -[node name="SprayMuzzle" type="Marker3D" parent="CameraPivot/SprayNozzle"] +[node name="SprayMuzzle" type="Marker3D" parent="CameraPivot/SprayMount"] unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 0.997564, -0.0697565, 0, 0.0697565, 0.997564, 0, 0, -0.15) -[node name="WideSpray" parent="CameraPivot/SprayNozzle/SprayMuzzle" instance=ExtResource("3_ibq07")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) +[node name="WideSpray" parent="CameraPivot/SprayMount/SprayMuzzle" instance=ExtResource("3_ibq07")] -[node name="PointSpray" parent="CameraPivot/SprayNozzle/SprayMuzzle" instance=ExtResource("3_6wgkm")] +[node name="PointSpray" parent="CameraPivot/SprayMount/SprayMuzzle" instance=ExtResource("3_6wgkm")] visible = false +[node name="SprayRumbler" type="Node3D" parent="CameraPivot/SprayMount"] +unique_name_in_owner = true +script = ExtResource("5_ipd7g") + +[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot/SprayMount/SprayRumbler"] +layers = 2 +mesh = SubResource("BoxMesh_ua7a2") +skeleton = NodePath("../../..") + [node name="Camera3D" type="Camera3D" parent="CameraPivot"] current = true diff --git a/src/props/wall_switch/wall_switch.tscn b/src/props/wall_switch/wall_switch.tscn index 2d48d82..7808c10 100644 --- a/src/props/wall_switch/wall_switch.tscn +++ b/src/props/wall_switch/wall_switch.tscn @@ -81,6 +81,33 @@ emission_energy_multiplier = 0.0 material = SubResource("StandardMaterial3D_0cc87") size = Vector3(0.08, 0.05, 0.025) +[sub_resource type="Animation" id="Animation_ugm6b"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Lights/DangerLight:mesh:material: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.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Lights/SuccessLight:mesh:material:emission_energy_multiplier") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + [sub_resource type="Animation" id="Animation_pea1n"] resource_name = "error_blink" length = 4.0 @@ -110,33 +137,6 @@ tracks/1/keys = { "values": [0.0] } -[sub_resource type="Animation" id="Animation_ugm6b"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Lights/DangerLight:mesh:material: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.0] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Lights/SuccessLight:mesh:material:emission_energy_multiplier") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.0] -} - [sub_resource type="Animation" id="Animation_njbf4"] resource_name = "success" length = 0.5 diff --git a/src/ui/rumbler.gd b/src/ui/rumbler.gd new file mode 100644 index 0000000..6ff60cb --- /dev/null +++ b/src/ui/rumbler.gd @@ -0,0 +1,15 @@ +@tool +class_name Rumbler extends Control +## Rumbles children. + +const EPSILON := 1e-6 + +@export var intensity := 0.0 + + +func _process(_delta: float) -> void: + if intensity > EPSILON: + position.x = randfn(0, intensity) + position.y = randfn(0, intensity) + else: + position = Vector2.ZERO diff --git a/src/ui/rumbler_3d.gd b/src/ui/rumbler_3d.gd new file mode 100644 index 0000000..3f381d3 --- /dev/null +++ b/src/ui/rumbler_3d.gd @@ -0,0 +1,16 @@ +@tool +class_name Rumbler3D extends Node3D +## Rumbles children. + +const EPSILON := 1e-6 + +@export var intensity := 0.0 + + +func _process(_delta: float) -> void: + if intensity > EPSILON: + position.x = randfn(0, intensity) + position.y = randfn(0, intensity) + position.z = randfn(0, intensity) + else: + position = Vector3.ZERO