From 3834d282ca1a05eaa699ef2c7c4456db30e861c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vojte=CC=8Cch=20Struha=CC=81r?= Date: Fri, 21 Feb 2025 17:15:52 +0100 Subject: [PATCH] Fixed cubic bezier curve --- addons/portal_gizmos/gizmo.gd | 19 +++++++++++-------- forward_pointer.gd | 12 ++++++++++++ forward_pointer.gd.uid | 1 + forward_pointer.tscn | 19 +++++++++++++++++++ levels/level_3_rooms.tscn | 7 ++++++- 5 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 forward_pointer.gd create mode 100644 forward_pointer.gd.uid create mode 100644 forward_pointer.tscn diff --git a/addons/portal_gizmos/gizmo.gd b/addons/portal_gizmos/gizmo.gd index d561203..29ee077 100644 --- a/addons/portal_gizmos/gizmo.gd +++ b/addons/portal_gizmos/gizmo.gd @@ -36,15 +36,21 @@ func _redraw(gizmo): var exit = portal.exit_portal var D = portal.global_position.distance_to(exit.global_position) - var p0 = Vector3.ZERO - var p3 = portal.to_local(exit.global_position) - var p1 = p0 + -portal.transform.basis.z * D * 0.25 # Control point - var p2 = p3 + -exit.transform.basis.z * D * 0.25 # Control point + var p0 = portal.global_position + var p3 = exit.global_position - var RESOLUTION: int = 24 + var p1 = p0 -portal.global_transform.basis.z * D * 0.25 + var p2 = p3 -exit.global_transform.basis.z * D * 0.25 + + p0 = portal.to_local(p0) + p1 = portal.to_local(p1) + p2 = portal.to_local(p2) + p3 = portal.to_local(p3) + lines.push_back(p0) + const RESOLUTION: int = 24 for i in range(1, RESOLUTION + 1): var t: float = float(i) / RESOLUTION var spline_pos: Vector3 = pow(1 - t, 3) * p0 \ @@ -55,11 +61,8 @@ func _redraw(gizmo): lines.push_back(spline_pos) lines.push_back(p3) - print("[gizmo] Bezier lines: " + str(lines.size())) gizmo.add_lines(PackedVector3Array([p0, p3, p1, p2]), get_material("secondary", gizmo)) - - #var handles = PackedVector3Array() #handles.push_back(Vector3(0, 1, 0)) diff --git a/forward_pointer.gd b/forward_pointer.gd new file mode 100644 index 0000000..6dcfa59 --- /dev/null +++ b/forward_pointer.gd @@ -0,0 +1,12 @@ +@tool +extends Node + + +@onready var indicator: MeshInstance3D = $Indicator + + +func _process(delta: float) -> void: + var p = get_parent() as Node3D + if p: + indicator.global_position = p.global_position + indicator.global_position -= p.global_transform.basis.z diff --git a/forward_pointer.gd.uid b/forward_pointer.gd.uid new file mode 100644 index 0000000..a80f818 --- /dev/null +++ b/forward_pointer.gd.uid @@ -0,0 +1 @@ +uid://cls46uawo3qq diff --git a/forward_pointer.tscn b/forward_pointer.tscn new file mode 100644 index 0000000..8869feb --- /dev/null +++ b/forward_pointer.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=3 uid="uid://b3igtxttykf7i"] + +[ext_resource type="Script" uid="uid://cls46uawo3qq" path="res://forward_pointer.gd" id="1_cde0p"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_anedn"] +albedo_color = Color(1, 0, 1, 1) +emission_enabled = true +emission = Color(0.425891, 0.000125429, 0.425888, 1) + +[sub_resource type="SphereMesh" id="SphereMesh_n0wat"] +material = SubResource("StandardMaterial3D_anedn") +radius = 0.25 +height = 0.5 + +[node name="ForwardPointer" type="Node"] +script = ExtResource("1_cde0p") + +[node name="Indicator" type="MeshInstance3D" parent="."] +mesh = SubResource("SphereMesh_n0wat") diff --git a/levels/level_3_rooms.tscn b/levels/level_3_rooms.tscn index cfafe45..86c0c40 100644 --- a/levels/level_3_rooms.tscn +++ b/levels/level_3_rooms.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://27pb62xwsqd8"] +[gd_scene load_steps=13 format=3 uid="uid://27pb62xwsqd8"] [ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="1_mmt1i"] [ext_resource type="MeshLibrary" uid="uid://bedqgubx1g1uf" path="res://prototypes.tres" id="2_vdsn8"] @@ -6,6 +6,7 @@ [ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="4_top28"] [ext_resource type="Script" uid="uid://bkv7t4hw21byg" path="res://addons/simple-portal-system/scripts/simple_portal_teleport.gd" id="5_evjit"] [ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="6_hlt8e"] +[ext_resource type="PackedScene" uid="uid://b3igtxttykf7i" path="res://forward_pointer.tscn" id="6_vdsn8"] [ext_resource type="Script" uid="uid://cili3lyodjqel" path="res://portal_environment_adapter.gd" id="7_2gewm"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_b0o0q"] @@ -61,6 +62,8 @@ script = ExtResource("5_evjit") transform = Transform3D(1, 0, 4.72511e-13, 0, 1, 0, -4.72511e-13, 0, 1, 0, 0, -0.250244) shape = SubResource("BoxShape3D_cgnft") +[node name="ForwardPointer" parent="Portal_red" instance=ExtResource("6_vdsn8")] + [node name="Portal_orange" type="MeshInstance3D" parent="." node_paths=PackedStringArray("exit_portal")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, -0.5) mesh = ExtResource("3_c4jka") @@ -80,6 +83,8 @@ script = ExtResource("5_evjit") transform = Transform3D(1, 0, 4.72511e-13, 0, 1, 0, -4.72511e-13, 0, 1, 0, 0, -0.250244) shape = SubResource("BoxShape3D_cgnft") +[node name="ForwardPointer" parent="Portal_orange" instance=ExtResource("6_vdsn8")] + [node name="Player" parent="." instance=ExtResource("6_hlt8e")] transform = Transform3D(0.727006, 0, 0.686631, 0, 1, 0, -0.686631, 0, 0.727006, 4.51826, 1.08552, 4.0716)