antichamber-at-home/addons/portals/gizmos/portal_forward_direction.gd

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)
)