diff --git a/src/equipment/point_spray/point_spray.gd b/src/equipment/point_spray/point_spray.gd index 015e462..8cb1c98 100644 --- a/src/equipment/point_spray/point_spray.gd +++ b/src/equipment/point_spray/point_spray.gd @@ -4,13 +4,9 @@ class_name PointSpray extends Spray @export var spray_scale := 1.5 @onready var laser: LaserCast = %LaserCast -@onready var spray_effect: MeshInstance3D = %SprayEffect - -@onready var beam_particles_1: GPUParticles3D = $BeamParticles1 -@onready var beam_particles_2: GPUParticles3D = $BeamParticles2 -func _fire() -> void: +func _spray() -> void: if laser.is_colliding(): var collider := laser.get_collider() if collider is GunkBody: @@ -21,13 +17,3 @@ func _fire() -> void: ) if collider is GunkNode: (collider as GunkNode).hit() - - spray_effect.visible = true - beam_particles_1.emitting = true - beam_particles_2.emitting = true - - -func _idle() -> void: - spray_effect.visible = false - beam_particles_1.emitting = false - beam_particles_2.emitting = false diff --git a/src/equipment/point_spray/point_spray.tscn b/src/equipment/point_spray/point_spray.tscn index 4c08713..c0fbdb0 100644 --- a/src/equipment/point_spray/point_spray.tscn +++ b/src/equipment/point_spray/point_spray.tscn @@ -59,6 +59,7 @@ sorting_offset = 1.0 mesh = SubResource("CylinderMesh_j5thb") [node name="BeamParticles1" type="GPUParticles3D" parent="."] +unique_name_in_owner = true amount = 16 lifetime = 0.5 local_coords = true @@ -66,6 +67,7 @@ process_material = SubResource("ParticleProcessMaterial_nc5qr") draw_pass_1 = SubResource("QuadMesh_fgb4j") [node name="BeamParticles2" type="GPUParticles3D" parent="."] +unique_name_in_owner = true lifetime = 0.2 local_coords = true process_material = SubResource("ParticleProcessMaterial_vwgy4") diff --git a/src/equipment/spray.gd b/src/equipment/spray.gd index 601248f..49de01e 100644 --- a/src/equipment/spray.gd +++ b/src/equipment/spray.gd @@ -1,24 +1,24 @@ -class_name Spray extends Node3D -## Abstract base class for spraygun types +class_name Spray extends Tool +## Base class for spraygun tools -var firing := false +@onready var spray_effect: MeshInstance3D = %SprayEffect +@onready var beam_particles_1: GPUParticles3D = %BeamParticles1 +@onready var beam_particles_2: GPUParticles3D = %BeamParticles2 + + +func _spray() -> void: + pass ## Implemented in derived type func _fire() -> void: - pass + _spray() + + spray_effect.visible = true + beam_particles_1.emitting = true + beam_particles_2.emitting = true func _idle() -> void: - pass - - -## Called each frame that this spray is being fired. -func fire() -> void: - firing = true - _fire() - - -## Called each frame that this spray is not being fired. -func idle() -> void: - firing = false - _idle() + spray_effect.visible = false + beam_particles_1.emitting = false + beam_particles_2.emitting = false diff --git a/src/equipment/spray.gd.uid b/src/equipment/spray.gd.uid index 6cf6aab..57de2d8 100644 --- a/src/equipment/spray.gd.uid +++ b/src/equipment/spray.gd.uid @@ -1 +1 @@ -uid://caygiek3vmx1g +uid://bqdlht6f7xy0i diff --git a/src/equipment/tool.gd b/src/equipment/tool.gd new file mode 100644 index 0000000..ccbda95 --- /dev/null +++ b/src/equipment/tool.gd @@ -0,0 +1,24 @@ +class_name Tool extends Node3D +## Abstract base class for spraygun types + +var firing := false + + +func _fire() -> void: + pass + + +func _idle() -> void: + pass + + +## Called each frame that this tool is being fired. +func fire() -> void: + firing = true + _fire() + + +## Called each frame that this tool is not being fired. +func idle() -> void: + firing = false + _idle() diff --git a/src/equipment/tool.gd.uid b/src/equipment/tool.gd.uid new file mode 100644 index 0000000..6cf6aab --- /dev/null +++ b/src/equipment/tool.gd.uid @@ -0,0 +1 @@ +uid://caygiek3vmx1g diff --git a/src/equipment/wide_spray/wide_spray.gd b/src/equipment/wide_spray/wide_spray.gd index c571124..26e6636 100644 --- a/src/equipment/wide_spray/wide_spray.gd +++ b/src/equipment/wide_spray/wide_spray.gd @@ -6,13 +6,9 @@ const SPRAYCAST_GROUP := "SprayCast" @export var spray_scale := 1.0 @onready var spray_casts: Node3D = %SprayCasts -@onready var spray_effect: Node3D = %SprayEffect - -@onready var beam_particles_1: GPUParticles3D = $BeamParticles1 -@onready var beam_particles_2: GPUParticles3D = $BeamParticles2 -func _fire() -> void: +func _spray() -> void: var prev_target: GunkBody = null var prev_point: Vector3 var prev_normal: Vector3 @@ -37,13 +33,3 @@ func _fire() -> void: prev_normal = normal elif collider is GunkNode: (collider as GunkNode).hit() - - spray_effect.visible = true - beam_particles_1.emitting = true - beam_particles_2.emitting = true - - -func _idle() -> void: - spray_effect.visible = false - beam_particles_1.emitting = false - beam_particles_2.emitting = false diff --git a/src/equipment/wide_spray/wide_spray.tscn b/src/equipment/wide_spray/wide_spray.tscn index 93048da..77266e5 100644 --- a/src/equipment/wide_spray/wide_spray.tscn +++ b/src/equipment/wide_spray/wide_spray.tscn @@ -113,6 +113,7 @@ texture_albedo = ExtResource("5_xo3vu") cull_mask = 1048573 [node name="BeamParticles1" type="GPUParticles3D" parent="."] +unique_name_in_owner = true amount = 16 lifetime = 0.5 local_coords = true @@ -120,6 +121,7 @@ process_material = SubResource("ParticleProcessMaterial_pr4yq") draw_pass_1 = SubResource("QuadMesh_trcry") [node name="BeamParticles2" type="GPUParticles3D" parent="."] +unique_name_in_owner = true lifetime = 0.2 local_coords = true process_material = SubResource("ParticleProcessMaterial_lyk2j") diff --git a/src/player/player.gd b/src/player/player.gd index 32c103f..2554949 100644 --- a/src/player/player.gd +++ b/src/player/player.gd @@ -19,8 +19,9 @@ var firing := false @onready var player_hud: PlayerHUD = %PlayerHUD @onready var camera_pivot: CameraController = %CameraPivot -@onready var spray_muzzle: Marker3D = %SprayMuzzle -@onready var spray_rumbler: Rumbler3D = %SprayRumbler +@onready var tool_muzzle: Marker3D = %ToolMuzzle +@onready var tool_rumbler: Rumbler3D = %ToolRumbler + @onready var interact_ray: RayCast3D = %InteractRay @@ -40,8 +41,8 @@ func get_friction() -> float: return AIR_FRICTION -func get_spray() -> Spray: - return spray_muzzle.get_child(0) +func get_tool() -> Spray: + return tool_muzzle.get_child(0) func _physics_process(delta: float) -> void: @@ -53,13 +54,13 @@ func _physics_process(delta: float) -> void: interactive.activate() if Input.is_action_pressed("fire"): - get_spray().fire() + get_tool().fire() firing = true - spray_rumbler.intensity = 0.002 + tool_rumbler.intensity = 0.002 else: - get_spray().idle() + get_tool().idle() firing = false - spray_rumbler.intensity *= 0.8 + tool_rumbler.intensity *= 0.8 # Gravity if not is_on_floor(): diff --git a/src/player/player.tscn b/src/player/player.tscn index df8f82e..0bfd9f2 100644 --- a/src/player/player.tscn +++ b/src/player/player.tscn @@ -1,12 +1,10 @@ -[gd_scene load_steps=10 format=3 uid="uid://bwe2jdmvinhqd"] +[gd_scene load_steps=8 format=3 uid="uid://bwe2jdmvinhqd"] [ext_resource type="Script" uid="uid://buwh0g1ga2aka" path="res://src/player/player.gd" id="1_npueo"] [ext_resource type="Script" uid="uid://cx1yt0drthpw3" 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" uid="uid://b274q7uvn0cvp" 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"] -[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="7_o822w"] [sub_resource type="BoxMesh" id="BoxMesh_ua7a2"] size = Vector3(0.05, 0.05, 0.3) @@ -22,23 +20,20 @@ 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="SprayMount" type="Node3D" parent="CameraPivot"] +[node name="ToolMount" type="Node3D" parent="CameraPivot"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.15, -0.1, -0.1) -[node name="SprayMuzzle" type="Marker3D" parent="CameraPivot/SprayMount"] +[node name="ToolMuzzle" type="Marker3D" parent="CameraPivot/ToolMount"] 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/SprayMount/SprayMuzzle" instance=ExtResource("3_ibq07")] +[node name="PointSpray" parent="CameraPivot/ToolMount/ToolMuzzle" 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"] +[node name="ToolRumbler" type="Node3D" parent="CameraPivot/ToolMount"] unique_name_in_owner = true script = ExtResource("5_ipd7g") -[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot/SprayMount/SprayRumbler"] +[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot/ToolMount/ToolRumbler"] layers = 2 mesh = SubResource("BoxMesh_ua7a2") skeleton = NodePath("../../..") @@ -57,5 +52,3 @@ shape = SubResource("CapsuleShape3D_s7f0r") [node name="PlayerHUD" parent="." instance=ExtResource("5_jvafu")] unique_name_in_owner = true - -[node name="FloatingDust" parent="." instance=ExtResource("7_o822w")]