pick up bombs or something

This commit is contained in:
veclavtalica 2025-02-11 20:29:33 +03:00
parent d80381c489
commit e810836675
7 changed files with 74 additions and 15 deletions

View File

@ -67,6 +67,11 @@ fire={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null) "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
] ]
} }
pick={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
]
}
[layer_names] [layer_names]

View File

@ -222,6 +222,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.60402, 0.396167, 2.77978)
[node name="Sprout6" parent="Plants" instance=ExtResource("3_2xvqq")] [node name="Sprout6" parent="Plants" instance=ExtResource("3_2xvqq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.59598, 0.396167, 2.77978) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.59598, 0.396167, 2.77978)
[node name="Sprout19" parent="Plants" instance=ExtResource("3_2xvqq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.27774, 0.866392, 8.06555)
[node name="Sprout7" parent="Plants" instance=ExtResource("3_2xvqq")] [node name="Sprout7" parent="Plants" instance=ExtResource("3_2xvqq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00401986, 0.396167, 3.37978) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00401986, 0.396167, 3.37978)

View File

@ -10,6 +10,7 @@ const JUMP_VELOCITY = 4.5
@export var _projectile_point: Marker3D @export var _projectile_point: Marker3D
@export var _camera_pivot: Node3D @export var _camera_pivot: Node3D
@export var _camera: Camera3D @export var _camera: Camera3D
@export var _line_of_sight: ShapeCast3D
@export var _shot_sound: AudioStreamPlayer3D @export var _shot_sound: AudioStreamPlayer3D
@export var id: int @export var id: int
@ -22,7 +23,7 @@ var _mouse_sensitivity := 0.008 # radians/pixel
var _projectile_speed := 12.0 var _projectile_speed := 12.0
var controls_disabled := false var controls_disabled := false
var held_thing: String
# What the others see. # What the others see.
func _init_bystander() -> void: func _init_bystander() -> void:
@ -72,6 +73,18 @@ func _physics_process(delta: float) -> void:
move_and_slide() move_and_slide()
@rpc("any_peer", "call_local", "reliable")
func hold_thing() -> void:
held_thing = "water"
_camera_pivot.get_node("HeldViewmodel").show()
@rpc("any_peer", "call_local", "reliable")
func throw_thing() -> void:
held_thing = ""
_camera_pivot.get_node("HeldViewmodel").hide()
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if controls_disabled or id != multiplayer.get_unique_id(): if controls_disabled or id != multiplayer.get_unique_id():
return return
@ -82,7 +95,16 @@ func _unhandled_input(event: InputEvent) -> void:
_camera_pivot.rotation.x = clamp(_camera_pivot.rotation.x, -1.2, 1.2) _camera_pivot.rotation.x = clamp(_camera_pivot.rotation.x, -1.2, 1.2)
return return
if event.is_action_pressed("fire"): if event.is_action_pressed("pick") and held_thing == "":
if _line_of_sight.is_colliding():
if id != 1:
print("test")
# TODO: bad
var picked = _line_of_sight.get_collider(0).get_parent()
picked.get_picked_up.rpc()
hold_thing.rpc()
if event.is_action_pressed("fire") and held_thing != "":
var new_projectile: Node3D = _projectile_scene.instantiate() var new_projectile: Node3D = _projectile_scene.instantiate()
_projectile_holder.add_child(new_projectile, true) _projectile_holder.add_child(new_projectile, true)
_set_projectile_authority.rpc(new_projectile.get_path(), id) _set_projectile_authority.rpc(new_projectile.get_path(), id)
@ -93,6 +115,7 @@ func _unhandled_input(event: InputEvent) -> void:
new_projectile.body.linear_velocity = -_camera.global_basis.z * _projectile_speed new_projectile.body.linear_velocity = -_camera.global_basis.z * _projectile_speed
_shot_sound.play() _shot_sound.play()
throw_thing.rpc()
@rpc("authority", "call_local", "reliable") @rpc("authority", "call_local", "reliable")

View File

@ -1,8 +1,9 @@
[gd_scene load_steps=7 format=3 uid="uid://cs8c570bxh6u"] [gd_scene load_steps=9 format=3 uid="uid://cs8c570bxh6u"]
[ext_resource type="Script" path="res://src/ingame/player.gd" id="1_isrmf"] [ext_resource type="Script" path="res://src/ingame/player.gd" id="1_isrmf"]
[ext_resource type="PackedScene" uid="uid://tdsbo3e5ic86" path="res://src/ingame/water_bomb.tscn" id="2_naek4"] [ext_resource type="PackedScene" uid="uid://tdsbo3e5ic86" path="res://src/ingame/water_bomb.tscn" id="2_naek4"]
[ext_resource type="AudioStream" uid="uid://3dlhs18w1fa2" path="res://assets/sfx/boom.wav" id="3_u2hxa"] [ext_resource type="AudioStream" uid="uid://3dlhs18w1fa2" path="res://assets/sfx/boom.wav" id="3_u2hxa"]
[ext_resource type="PackedScene" uid="uid://s2a1pry5fw8f" path="res://scenes/water_bomb_model.tscn" id="4_bfvih"]
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_2xotl"] [sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_2xotl"]
properties/0/path = NodePath(".:position") properties/0/path = NodePath(".:position")
@ -28,7 +29,9 @@ properties/5/replication_mode = 2
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_f4jjl"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_f4jjl"]
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("_projectile_holder", "_projectile_point", "_camera_pivot", "_camera", "_shot_sound")] [sub_resource type="SphereShape3D" id="SphereShape3D_rsfjy"]
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("_projectile_holder", "_projectile_point", "_camera_pivot", "_camera", "_line_of_sight", "_shot_sound")]
collision_layer = 2 collision_layer = 2
script = ExtResource("1_isrmf") script = ExtResource("1_isrmf")
_projectile_scene = ExtResource("2_naek4") _projectile_scene = ExtResource("2_naek4")
@ -36,6 +39,7 @@ _projectile_holder = NodePath("ProjectileHolder")
_projectile_point = NodePath("ProjectilePoint") _projectile_point = NodePath("ProjectilePoint")
_camera_pivot = NodePath("CameraPivot") _camera_pivot = NodePath("CameraPivot")
_camera = NodePath("CameraPivot/Camera3D") _camera = NodePath("CameraPivot/Camera3D")
_line_of_sight = NodePath("CameraPivot/LineOfSight")
_shot_sound = NodePath("ShotSound") _shot_sound = NodePath("ShotSound")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
@ -66,6 +70,20 @@ shape = SubResource("CapsuleShape3D_f4jjl")
[node name="Camera3D" type="Camera3D" parent="CameraPivot"] [node name="Camera3D" type="Camera3D" parent="CameraPivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
[node name="LineOfSight" type="ShapeCast3D" parent="CameraPivot"]
shape = SubResource("SphereShape3D_rsfjy")
target_position = Vector3(0, 0, -2)
collision_mask = 16
collide_with_areas = true
collide_with_bodies = false
debug_shape_custom_color = Color(0.628721, 0, 0.256939, 1)
[node name="HeldViewmodel" type="Node3D" parent="CameraPivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.2, -1)
visible = false
[node name="Model" parent="CameraPivot/HeldViewmodel" instance=ExtResource("4_bfvih")]
[node name="ShotSound" type="AudioStreamPlayer3D" parent="."] [node name="ShotSound" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("3_u2hxa") stream = ExtResource("3_u2hxa")
bus = &"SoundEffects" bus = &"SoundEffects"

View File

@ -43,6 +43,7 @@ texture = ExtResource("3_kghdv")
[node name="Area3D" type="Area3D" parent="."] [node name="Area3D" type="Area3D" parent="."]
collision_layer = 8 collision_layer = 8
collision_mask = 0 collision_mask = 0
monitoring = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
shape = SubResource("CapsuleShape3D_cwbye") shape = SubResource("CapsuleShape3D_cwbye")

View File

@ -4,6 +4,7 @@ extends Node3D
@export var _splash_small_quiet_sound: AudioStreamPlayer3D @export var _splash_small_quiet_sound: AudioStreamPlayer3D
@export var _model: Node3D @export var _model: Node3D
@export var _splash_particles: GPUParticles3D @export var _splash_particles: GPUParticles3D
@export var _picking_area: Area3D
@export var body: RigidBody3D @export var body: RigidBody3D
## no longer exists and shouldn't be considered, but not ready to be freed yet ## no longer exists and shouldn't be considered, but not ready to be freed yet
@export var is_dead := false @export var is_dead := false
@ -48,6 +49,7 @@ func _on_body_entered(p_body: Node3D) -> void:
is_dead = true is_dead = true
_model.hide() _model.hide()
_picking_area.collision_layer = 0
_disable_body.rpc() _disable_body.rpc()
await _splash_small_sound.finished await _splash_small_sound.finished
@ -69,3 +71,9 @@ func set_global_pos(new: Vector3) -> void:
global_position = new global_position = new
body.global_position = new body.global_position = new
body.reset_physics_interpolation() body.reset_physics_interpolation()
@rpc("any_peer", "call_local", "reliable")
func get_picked_up() -> void:
if is_multiplayer_authority():
queue_free()

View File

@ -1,6 +1,7 @@
[gd_scene load_steps=11 format=3 uid="uid://tdsbo3e5ic86"] [gd_scene load_steps=11 format=3 uid="uid://tdsbo3e5ic86"]
[ext_resource type="Script" path="res://src/ingame/water_bomb.gd" id="1_lk5fq"] [ext_resource type="Script" path="res://src/ingame/water_bomb.gd" id="1_lk5fq"]
[ext_resource type="PackedScene" uid="uid://s2a1pry5fw8f" path="res://scenes/water_bomb_model.tscn" id="2_0lxuq"]
[ext_resource type="AudioStream" uid="uid://dtjpv2b74g24m" path="res://assets/sfx/splash-small.wav" id="2_0wk8g"] [ext_resource type="AudioStream" uid="uid://dtjpv2b74g24m" path="res://assets/sfx/splash-small.wav" id="2_0wk8g"]
[ext_resource type="AudioStream" uid="uid://blgrl2wl05feq" path="res://assets/sfx/splash-small-quiet.wav" id="3_hgy7l"] [ext_resource type="AudioStream" uid="uid://blgrl2wl05feq" path="res://assets/sfx/splash-small-quiet.wav" id="3_hgy7l"]
@ -24,11 +25,6 @@ properties/5/path = NodePath("SplashParticles:emitting")
properties/5/spawn = true properties/5/spawn = true
properties/5/replication_mode = 2 properties/5/replication_mode = 2
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ptaep"]
albedo_color = Color(0.0936238, 0.825356, 1, 1)
metallic = 0.8
roughness = 0.4
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v7dnr"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v7dnr"]
albedo_color = Color(0, 1, 1, 1) albedo_color = Color(0, 1, 1, 1)
roughness = 0.2 roughness = 0.2
@ -50,22 +46,19 @@ radius = 0.2
[sub_resource type="SphereShape3D" id="SphereShape3D_y6453"] [sub_resource type="SphereShape3D" id="SphereShape3D_y6453"]
radius = 1.5 radius = 1.5
[node name="WaterBomb" type="Node3D" node_paths=PackedStringArray("_splash_small_sound", "_splash_small_quiet_sound", "_model", "_splash_particles", "body")] [node name="WaterBomb" type="Node3D" node_paths=PackedStringArray("_splash_small_sound", "_splash_small_quiet_sound", "_model", "_splash_particles", "_picking_area", "body")]
script = ExtResource("1_lk5fq") script = ExtResource("1_lk5fq")
_splash_small_sound = NodePath("SplashSmallSound") _splash_small_sound = NodePath("SplashSmallSound")
_splash_small_quiet_sound = NodePath("SplashSmallQuietSound") _splash_small_quiet_sound = NodePath("SplashSmallQuietSound")
_model = NodePath("Model") _model = NodePath("Model")
_splash_particles = NodePath("SplashParticles") _splash_particles = NodePath("SplashParticles")
_picking_area = NodePath("PickingArea")
body = NodePath("RigidBody3D") body = NodePath("RigidBody3D")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_0ebrr") replication_config = SubResource("SceneReplicationConfig_0ebrr")
[node name="Model" type="CSGSphere3D" parent="."] [node name="Model" parent="." instance=ExtResource("2_0lxuq")]
material_override = SubResource("StandardMaterial3D_ptaep")
radius = 0.2
radial_segments = 24
rings = 12
[node name="SplashParticles" type="GPUParticles3D" parent="."] [node name="SplashParticles" type="GPUParticles3D" parent="."]
material_override = SubResource("StandardMaterial3D_v7dnr") material_override = SubResource("StandardMaterial3D_v7dnr")
@ -106,6 +99,14 @@ bus = &"SoundEffects"
stream = ExtResource("3_hgy7l") stream = ExtResource("3_hgy7l")
bus = &"SoundEffects" bus = &"SoundEffects"
[node name="PickingArea" type="Area3D" parent="."]
collision_layer = 16
collision_mask = 0
monitoring = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="PickingArea"]
shape = SubResource("SphereShape3D_6c830")
[connection signal="body_entered" from="RigidBody3D" to="." method="_on_body_entered"] [connection signal="body_entered" from="RigidBody3D" to="." method="_on_body_entered"]
[connection signal="area_entered" from="RigidBody3D/SplashArea" to="." method="_on_splash_area_entered"] [connection signal="area_entered" from="RigidBody3D/SplashArea" to="." method="_on_splash_area_entered"]
[connection signal="area_exited" from="RigidBody3D/SplashArea" to="." method="_on_splash_area_exited"] [connection signal="area_exited" from="RigidBody3D/SplashArea" to="." method="_on_splash_area_exited"]