Forgot the floaty
This commit is contained in:
parent
cf3a29d7c3
commit
8a11daf544
3 changed files with 52 additions and 5 deletions
|
@ -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
34
scenes/win_box.gd
Normal 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
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue