Forgot the floaty

This commit is contained in:
Thomas Muller 2024-12-22 15:18:04 -05:00
parent cf3a29d7c3
commit 8a11daf544
3 changed files with 52 additions and 5 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=21 format=4 uid="uid://bbqug1s083mdi"]
[gd_scene load_steps=22 format=4 uid="uid://bbqug1s083mdi"]
[ext_resource type="PackedScene" uid="uid://ci2uamlnv8swy" path="res://assets/maps/levelpool.blend" id="1_cpckw"]
[ext_resource type="PackedScene" uid="uid://cy86jyiy6skvk" path="res://scenes/player.tscn" id="2_eggmh"]
@ -7,6 +7,7 @@
[ext_resource type="AudioStream" uid="uid://cieprqff0h2nm" path="res://assets/sounds/door.wav" id="5_yad6d"]
[ext_resource type="PackedScene" uid="uid://dnq81gfo5y4oy" path="res://components/group_trigger_component.tscn" id="6_f2del"]
[ext_resource type="PackedScene" uid="uid://bfv04lp2tbxtd" path="res://scenes/monitor.tscn" id="6_qd2wd"]
[ext_resource type="Script" path="res://scenes/win_box.gd" id="7_oxf41"]
[ext_resource type="AudioStream" uid="uid://d20ver6nfndbt" path="res://assets/sounds/dialog/start_dialog.wav" id="7_r1xli"]
[ext_resource type="AudioStream" uid="uid://dbw14jkekqjrb" path="res://assets/sounds/dialog/win_dialog.wav" id="8_u6ajb"]
@ -159,7 +160,6 @@ libraries = {
[node name="Monitor" parent="." instance=ExtResource("6_qd2wd")]
transform = Transform3D(-0.877007, 0, -0.480477, 0, 1, 0, 0.480477, 0, -0.877007, -4.23016, 0.344398, -2.70049)
script = null
[node name="HoleRim" type="StaticBody3D" parent="."]
@ -179,9 +179,12 @@ shape = SubResource("BoxShape3D_epqy0")
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 4.85, 0.25, -6.15)
shape = SubResource("BoxShape3D_epqy0")
[node name="WinBox" parent="." instance=ExtResource("6_f2del")]
[node name="WinBox" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -1, -5)
group = "monitors"
script = ExtResource("7_oxf41")
[node name="FloatPoint" type="Node3D" parent="WinBox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="WinBox"]
shape = SubResource("BoxShape3D_dsbsn")
@ -203,7 +206,7 @@ stream = ExtResource("7_r1xli")
[node name="WinDialog" type="AudioStreamPlayer3D" parent="Kreb"]
stream = ExtResource("8_u6ajb")
[connection signal="activated_once" from="WinBox" to="Kreb/WinDialog" method="play" binds= [0.0]]
[connection signal="body_entered" from="WinBox" to="WinBox" method="_on_body_entered"]
[connection signal="activated_once" from="DialogTrigger" to="Kreb/StartDialog" method="play" binds= [0]]
[connection signal="finished" from="Kreb/WinDialog" to="ExitDoor" method="open"]

34
scenes/win_box.gd Normal file
View file

@ -0,0 +1,34 @@
extends Area3D
@onready
var _dialog = $"../Kreb/WinDialog"
@onready
var _float_point = $FloatPoint
var _lockout = false
var _grabbed_monitor: RigidBody3D
func _on_body_entered(body: Node3D) -> void:
if not body.is_in_group('monitors') or _lockout:
return
_lockout = true
_dialog.play()
# TODO: Better way to get the player?
for player in get_tree().get_nodes_in_group("players"):
if player._held_object == body:
player.force_drop()
_grabbed_monitor = body
_grabbed_monitor.remove_from_group('can_hold')
func _physics_process(delta: float) -> void:
if _grabbed_monitor:
var delta_position = _float_point.global_position - _grabbed_monitor.global_position
var move_speed = min(delta_position.length() * 400, 1000)
_grabbed_monitor.linear_velocity = delta_position.normalized() * move_speed * delta

View file

@ -108,6 +108,7 @@ func _physics_process(delta):
if _held_object:
_apply_holding_force(delta)
func _apply_friction(vel: Vector3, delta: float):
var speed = sqrt(vel.x ** 2 + vel.z ** 2)
if(speed == 0.0): return vel
@ -130,6 +131,7 @@ func _apply_friction(vel: Vector3, delta: float):
return vel * newspeed
func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float):
var currentspeed = vel.dot(wishdir)
var addspeed = wishspeed - currentspeed
@ -142,6 +144,7 @@ func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float
return vel + accelspeed * wishdir
func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: float):
var wishveloc = wishvel.normalized()
var wishspd = wishvel.length()
@ -160,12 +163,14 @@ func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: f
return vel + accelspeed * wishveloc
func _apply_holding_force(delta):
var hold_point = _camera.global_position - _camera.global_transform.basis.z * _held_object_distance
var delta_position = hold_point - _held_object.global_position
var move_speed = min(delta_position.length() * hold_force, max_hold_velocity)
_held_object.linear_velocity = delta_position.normalized() * move_speed * delta
func _input(event):
if event.is_action_pressed("pause"):
_paused = not _paused
@ -216,3 +221,8 @@ func _input(event):
if other.is_in_group('can_hold'):
_held_object = other
_held_object_distance = (Vector3(result.position) - _camera.global_position).length()
func force_drop():
if _held_object:
_held_object = null