40 lines
1.1 KiB
GDScript
40 lines
1.1 KiB
GDScript
extends EditorNode3DGizmoPlugin
|
|
|
|
func _init() -> void:
|
|
var forward_color = PortalSettings.get_setting("gizmo_forward_color")
|
|
create_material("forward", forward_color, false, false, false)
|
|
|
|
|
|
func _get_gizmo_name() -> String:
|
|
return "PortalForwardDirectionGizmo"
|
|
|
|
func _has_gizmo(for_node_3d: Node3D) -> bool:
|
|
return for_node_3d is Portal3D
|
|
|
|
func _redraw(gizmo: EditorNode3DGizmo) -> void:
|
|
var portal = gizmo.get_node_3d() as Portal3D
|
|
assert(portal != null, "This gizmo works only for Portal3D")
|
|
var active: bool = portal in EditorInterface.get_selection().get_selected_nodes()
|
|
|
|
gizmo.clear()
|
|
|
|
var lines: Array[Vector3] = [
|
|
Vector3.ZERO, Vector3(0, 0, 1)
|
|
]
|
|
if active:
|
|
var arrow_spread = 0.05
|
|
lines.append_array([
|
|
Vector3(0, 0, 1), Vector3(arrow_spread, -arrow_spread, 0.9),
|
|
Vector3(0, 0, 1), Vector3(-arrow_spread, arrow_spread, 0.9),
|
|
])
|
|
|
|
var offset = 0.005
|
|
for i in range(lines.size()):
|
|
var p = lines[i]
|
|
lines.append(Vector3(p.x + offset, p.y + offset, p.z))
|
|
|
|
gizmo.add_lines(
|
|
PackedVector3Array(lines),
|
|
get_material("forward", gizmo)
|
|
)
|