Compare commits
2 Commits
808e1503fb
...
3187c3d359
Author | SHA1 | Date | |
---|---|---|---|
3187c3d359 | |||
3834d282ca |
@ -4,7 +4,6 @@ extends EditorNode3DGizmoPlugin
|
|||||||
func _init():
|
func _init():
|
||||||
print("[gizmo] _init")
|
print("[gizmo] _init")
|
||||||
create_material("main", Color(1,0,1), false, true, false)
|
create_material("main", Color(1,0,1), false, true, false)
|
||||||
create_material("secondary", Color(1,0,0))
|
|
||||||
|
|
||||||
|
|
||||||
func _get_gizmo_name() -> String:
|
func _get_gizmo_name() -> String:
|
||||||
@ -13,38 +12,39 @@ func _get_gizmo_name() -> String:
|
|||||||
|
|
||||||
func _has_gizmo(for_node_3d: Node3D) -> bool:
|
func _has_gizmo(for_node_3d: Node3D) -> bool:
|
||||||
var result: bool = for_node_3d is Portal
|
var result: bool = for_node_3d is Portal
|
||||||
if result: print("[gizmo] _has_gizmo: " + for_node_3d.name)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
func _redraw(gizmo):
|
func _redraw(gizmo):
|
||||||
var portal = gizmo.get_node_3d() as Portal
|
var portal = gizmo.get_node_3d() as Portal
|
||||||
print("[gizmo] _redraw: " + portal.name)
|
|
||||||
|
|
||||||
gizmo.clear() # Always clear the gizmo
|
gizmo.clear() # Always clear the gizmo
|
||||||
|
|
||||||
if portal not in EditorInterface.get_selection().get_selected_nodes():
|
if portal not in EditorInterface.get_selection().get_selected_nodes():
|
||||||
return # If not selected, don't draw anything
|
return # If not selected, don't draw anything
|
||||||
|
|
||||||
|
|
||||||
var lines = PackedVector3Array()
|
var lines = PackedVector3Array()
|
||||||
|
|
||||||
|
|
||||||
if portal.exit_portal != null:
|
if portal.exit_portal != null:
|
||||||
print("[gizmo] Drawing the bezier")
|
|
||||||
# Draw a bezier curve connecting the two portals
|
# Draw a bezier curve connecting the two portals
|
||||||
var exit = portal.exit_portal
|
var exit = portal.exit_portal
|
||||||
var D = portal.global_position.distance_to(exit.global_position)
|
var D = portal.global_position.distance_to(exit.global_position)
|
||||||
|
|
||||||
var p0 = Vector3.ZERO
|
var p0 = portal.global_position
|
||||||
var p3 = portal.to_local(exit.global_position)
|
var p3 = 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 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)
|
lines.push_back(p0)
|
||||||
|
|
||||||
|
const RESOLUTION: int = 24
|
||||||
for i in range(1, RESOLUTION + 1):
|
for i in range(1, RESOLUTION + 1):
|
||||||
var t: float = float(i) / RESOLUTION
|
var t: float = float(i) / RESOLUTION
|
||||||
var spline_pos: Vector3 = pow(1 - t, 3) * p0 \
|
var spline_pos: Vector3 = pow(1 - t, 3) * p0 \
|
||||||
@ -53,13 +53,9 @@ func _redraw(gizmo):
|
|||||||
+ pow(t, 3) * p3
|
+ pow(t, 3) * p3
|
||||||
|
|
||||||
lines.push_back(spline_pos)
|
lines.push_back(spline_pos)
|
||||||
|
lines.push_back(spline_pos)
|
||||||
|
|
||||||
lines.push_back(p3)
|
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()
|
#var handles = PackedVector3Array()
|
||||||
#handles.push_back(Vector3(0, 1, 0))
|
#handles.push_back(Vector3(0, 1, 0))
|
||||||
|
Loading…
Reference in New Issue
Block a user