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://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"]
|
[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="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://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="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://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"]
|
[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")]
|
[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)
|
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="."]
|
[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)
|
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")
|
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)
|
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"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="WinBox"]
|
||||||
shape = SubResource("BoxShape3D_dsbsn")
|
shape = SubResource("BoxShape3D_dsbsn")
|
||||||
|
@ -203,7 +206,7 @@ stream = ExtResource("7_r1xli")
|
||||||
[node name="WinDialog" type="AudioStreamPlayer3D" parent="Kreb"]
|
[node name="WinDialog" type="AudioStreamPlayer3D" parent="Kreb"]
|
||||||
stream = ExtResource("8_u6ajb")
|
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="activated_once" from="DialogTrigger" to="Kreb/StartDialog" method="play" binds= [0]]
|
||||||
[connection signal="finished" from="Kreb/WinDialog" to="ExitDoor" method="open"]
|
[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:
|
if _held_object:
|
||||||
_apply_holding_force(delta)
|
_apply_holding_force(delta)
|
||||||
|
|
||||||
|
|
||||||
func _apply_friction(vel: Vector3, delta: float):
|
func _apply_friction(vel: Vector3, delta: float):
|
||||||
var speed = sqrt(vel.x ** 2 + vel.z ** 2)
|
var speed = sqrt(vel.x ** 2 + vel.z ** 2)
|
||||||
if(speed == 0.0): return vel
|
if(speed == 0.0): return vel
|
||||||
|
@ -130,6 +131,7 @@ func _apply_friction(vel: Vector3, delta: float):
|
||||||
|
|
||||||
return vel * newspeed
|
return vel * newspeed
|
||||||
|
|
||||||
|
|
||||||
func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float):
|
func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float):
|
||||||
var currentspeed = vel.dot(wishdir)
|
var currentspeed = vel.dot(wishdir)
|
||||||
var addspeed = wishspeed - currentspeed
|
var addspeed = wishspeed - currentspeed
|
||||||
|
@ -142,6 +144,7 @@ func _apply_accel(vel: Vector3, wishdir: Vector3, wishspeed: float, delta: float
|
||||||
|
|
||||||
return vel + accelspeed * wishdir
|
return vel + accelspeed * wishdir
|
||||||
|
|
||||||
|
|
||||||
func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: float):
|
func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: float):
|
||||||
var wishveloc = wishvel.normalized()
|
var wishveloc = wishvel.normalized()
|
||||||
var wishspd = wishvel.length()
|
var wishspd = wishvel.length()
|
||||||
|
@ -160,12 +163,14 @@ func _apply_air_accel(vel: Vector3, wishvel: Vector3, wishspeed: float, delta: f
|
||||||
|
|
||||||
return vel + accelspeed * wishveloc
|
return vel + accelspeed * wishveloc
|
||||||
|
|
||||||
|
|
||||||
func _apply_holding_force(delta):
|
func _apply_holding_force(delta):
|
||||||
var hold_point = _camera.global_position - _camera.global_transform.basis.z * _held_object_distance
|
var hold_point = _camera.global_position - _camera.global_transform.basis.z * _held_object_distance
|
||||||
var delta_position = hold_point - _held_object.global_position
|
var delta_position = hold_point - _held_object.global_position
|
||||||
var move_speed = min(delta_position.length() * hold_force, max_hold_velocity)
|
var move_speed = min(delta_position.length() * hold_force, max_hold_velocity)
|
||||||
_held_object.linear_velocity = delta_position.normalized() * move_speed * delta
|
_held_object.linear_velocity = delta_position.normalized() * move_speed * delta
|
||||||
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if event.is_action_pressed("pause"):
|
if event.is_action_pressed("pause"):
|
||||||
_paused = not _paused
|
_paused = not _paused
|
||||||
|
@ -216,3 +221,8 @@ func _input(event):
|
||||||
if other.is_in_group('can_hold'):
|
if other.is_in_group('can_hold'):
|
||||||
_held_object = other
|
_held_object = other
|
||||||
_held_object_distance = (Vector3(result.position) - _camera.global_position).length()
|
_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