generated from krampus/template-godot4
Refactored tools/sprays as distinct types
This commit is contained in:
parent
0f9188476c
commit
1515b9edee
@ -4,13 +4,9 @@ class_name PointSpray extends Spray
|
|||||||
@export var spray_scale := 1.5
|
@export var spray_scale := 1.5
|
||||||
|
|
||||||
@onready var laser: LaserCast = %LaserCast
|
@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():
|
if laser.is_colliding():
|
||||||
var collider := laser.get_collider()
|
var collider := laser.get_collider()
|
||||||
if collider is GunkBody:
|
if collider is GunkBody:
|
||||||
@ -21,13 +17,3 @@ func _fire() -> void:
|
|||||||
)
|
)
|
||||||
if collider is GunkNode:
|
if collider is GunkNode:
|
||||||
(collider as GunkNode).hit()
|
(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
|
|
||||||
|
@ -59,6 +59,7 @@ sorting_offset = 1.0
|
|||||||
mesh = SubResource("CylinderMesh_j5thb")
|
mesh = SubResource("CylinderMesh_j5thb")
|
||||||
|
|
||||||
[node name="BeamParticles1" type="GPUParticles3D" parent="."]
|
[node name="BeamParticles1" type="GPUParticles3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
amount = 16
|
amount = 16
|
||||||
lifetime = 0.5
|
lifetime = 0.5
|
||||||
local_coords = true
|
local_coords = true
|
||||||
@ -66,6 +67,7 @@ process_material = SubResource("ParticleProcessMaterial_nc5qr")
|
|||||||
draw_pass_1 = SubResource("QuadMesh_fgb4j")
|
draw_pass_1 = SubResource("QuadMesh_fgb4j")
|
||||||
|
|
||||||
[node name="BeamParticles2" type="GPUParticles3D" parent="."]
|
[node name="BeamParticles2" type="GPUParticles3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
lifetime = 0.2
|
lifetime = 0.2
|
||||||
local_coords = true
|
local_coords = true
|
||||||
process_material = SubResource("ParticleProcessMaterial_vwgy4")
|
process_material = SubResource("ParticleProcessMaterial_vwgy4")
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
class_name Spray extends Node3D
|
class_name Spray extends Tool
|
||||||
## Abstract base class for spraygun types
|
## 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:
|
func _fire() -> void:
|
||||||
pass
|
_spray()
|
||||||
|
|
||||||
|
spray_effect.visible = true
|
||||||
|
beam_particles_1.emitting = true
|
||||||
|
beam_particles_2.emitting = true
|
||||||
|
|
||||||
|
|
||||||
func _idle() -> void:
|
func _idle() -> void:
|
||||||
pass
|
spray_effect.visible = false
|
||||||
|
beam_particles_1.emitting = false
|
||||||
|
beam_particles_2.emitting = false
|
||||||
## 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()
|
|
||||||
|
@ -1 +1 @@
|
|||||||
uid://caygiek3vmx1g
|
uid://bqdlht6f7xy0i
|
||||||
|
24
src/equipment/tool.gd
Normal file
24
src/equipment/tool.gd
Normal file
@ -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()
|
1
src/equipment/tool.gd.uid
Normal file
1
src/equipment/tool.gd.uid
Normal file
@ -0,0 +1 @@
|
|||||||
|
uid://caygiek3vmx1g
|
@ -6,13 +6,9 @@ const SPRAYCAST_GROUP := "SprayCast"
|
|||||||
@export var spray_scale := 1.0
|
@export var spray_scale := 1.0
|
||||||
|
|
||||||
@onready var spray_casts: Node3D = %SprayCasts
|
@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_target: GunkBody = null
|
||||||
var prev_point: Vector3
|
var prev_point: Vector3
|
||||||
var prev_normal: Vector3
|
var prev_normal: Vector3
|
||||||
@ -37,13 +33,3 @@ func _fire() -> void:
|
|||||||
prev_normal = normal
|
prev_normal = normal
|
||||||
elif collider is GunkNode:
|
elif collider is GunkNode:
|
||||||
(collider as GunkNode).hit()
|
(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
|
|
||||||
|
@ -113,6 +113,7 @@ texture_albedo = ExtResource("5_xo3vu")
|
|||||||
cull_mask = 1048573
|
cull_mask = 1048573
|
||||||
|
|
||||||
[node name="BeamParticles1" type="GPUParticles3D" parent="."]
|
[node name="BeamParticles1" type="GPUParticles3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
amount = 16
|
amount = 16
|
||||||
lifetime = 0.5
|
lifetime = 0.5
|
||||||
local_coords = true
|
local_coords = true
|
||||||
@ -120,6 +121,7 @@ process_material = SubResource("ParticleProcessMaterial_pr4yq")
|
|||||||
draw_pass_1 = SubResource("QuadMesh_trcry")
|
draw_pass_1 = SubResource("QuadMesh_trcry")
|
||||||
|
|
||||||
[node name="BeamParticles2" type="GPUParticles3D" parent="."]
|
[node name="BeamParticles2" type="GPUParticles3D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
lifetime = 0.2
|
lifetime = 0.2
|
||||||
local_coords = true
|
local_coords = true
|
||||||
process_material = SubResource("ParticleProcessMaterial_lyk2j")
|
process_material = SubResource("ParticleProcessMaterial_lyk2j")
|
||||||
|
@ -19,8 +19,9 @@ var firing := false
|
|||||||
@onready var player_hud: PlayerHUD = %PlayerHUD
|
@onready var player_hud: PlayerHUD = %PlayerHUD
|
||||||
|
|
||||||
@onready var camera_pivot: CameraController = %CameraPivot
|
@onready var camera_pivot: CameraController = %CameraPivot
|
||||||
@onready var spray_muzzle: Marker3D = %SprayMuzzle
|
@onready var tool_muzzle: Marker3D = %ToolMuzzle
|
||||||
@onready var spray_rumbler: Rumbler3D = %SprayRumbler
|
@onready var tool_rumbler: Rumbler3D = %ToolRumbler
|
||||||
|
|
||||||
@onready var interact_ray: RayCast3D = %InteractRay
|
@onready var interact_ray: RayCast3D = %InteractRay
|
||||||
|
|
||||||
|
|
||||||
@ -40,8 +41,8 @@ func get_friction() -> float:
|
|||||||
return AIR_FRICTION
|
return AIR_FRICTION
|
||||||
|
|
||||||
|
|
||||||
func get_spray() -> Spray:
|
func get_tool() -> Spray:
|
||||||
return spray_muzzle.get_child(0)
|
return tool_muzzle.get_child(0)
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
@ -53,13 +54,13 @@ func _physics_process(delta: float) -> void:
|
|||||||
interactive.activate()
|
interactive.activate()
|
||||||
|
|
||||||
if Input.is_action_pressed("fire"):
|
if Input.is_action_pressed("fire"):
|
||||||
get_spray().fire()
|
get_tool().fire()
|
||||||
firing = true
|
firing = true
|
||||||
spray_rumbler.intensity = 0.002
|
tool_rumbler.intensity = 0.002
|
||||||
else:
|
else:
|
||||||
get_spray().idle()
|
get_tool().idle()
|
||||||
firing = false
|
firing = false
|
||||||
spray_rumbler.intensity *= 0.8
|
tool_rumbler.intensity *= 0.8
|
||||||
|
|
||||||
# Gravity
|
# Gravity
|
||||||
if not is_on_floor():
|
if not is_on_floor():
|
||||||
|
@ -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://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="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://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="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://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"]
|
[sub_resource type="BoxMesh" id="BoxMesh_ua7a2"]
|
||||||
size = Vector3(0.05, 0.05, 0.3)
|
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)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||||
script = ExtResource("2_veeqv")
|
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)
|
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
|
unique_name_in_owner = true
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.997564, -0.0697565, 0, 0.0697565, 0.997564, 0, 0, -0.15)
|
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")]
|
[node name="ToolRumbler" type="Node3D" parent="CameraPivot/ToolMount"]
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="SprayRumbler" type="Node3D" parent="CameraPivot/SprayMount"]
|
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
script = ExtResource("5_ipd7g")
|
script = ExtResource("5_ipd7g")
|
||||||
|
|
||||||
[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot/SprayMount/SprayRumbler"]
|
[node name="SprayNozzle" type="MeshInstance3D" parent="CameraPivot/ToolMount/ToolRumbler"]
|
||||||
layers = 2
|
layers = 2
|
||||||
mesh = SubResource("BoxMesh_ua7a2")
|
mesh = SubResource("BoxMesh_ua7a2")
|
||||||
skeleton = NodePath("../../..")
|
skeleton = NodePath("../../..")
|
||||||
@ -57,5 +52,3 @@ shape = SubResource("CapsuleShape3D_s7f0r")
|
|||||||
|
|
||||||
[node name="PlayerHUD" parent="." instance=ExtResource("5_jvafu")]
|
[node name="PlayerHUD" parent="." instance=ExtResource("5_jvafu")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
||||||
[node name="FloatingDust" parent="." instance=ExtResource("7_o822w")]
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user