82 lines
2.5 KiB
GDScript
82 lines
2.5 KiB
GDScript
extends EditorNode3DGizmoPlugin
|
|
|
|
const ProtoGizmoWrapper = preload("res://addons/proto_shape/proto_gizmo_wrapper/proto_gizmo_wrapper.gd")
|
|
const ProtoRamp = preload("res://addons/proto_shape/proto_ramp/proto_ramp.gd")
|
|
|
|
# Must be initialized externally by ProtoShape plugin
|
|
var undo_redo: EditorUndoRedoManager
|
|
|
|
signal snapping_changed(snapping: bool)
|
|
signal fine_snapping_changed(fine_snapping: bool)
|
|
|
|
# Must be initialized externally by ProtoShape plugin
|
|
var _snapping: bool = false
|
|
var snapping: bool: set = set_snapping, get = get_snapping
|
|
var _fine_snapping: bool = false
|
|
var fine_snapping: bool: set = set_fine_snapping, get = get_fine_snapping
|
|
|
|
func set_snapping(snapping: bool) -> void:
|
|
_snapping = snapping
|
|
snapping_changed.emit(snapping)
|
|
|
|
func set_fine_snapping(fine_snapping: bool) -> void:
|
|
_fine_snapping = fine_snapping
|
|
fine_snapping_changed.emit(fine_snapping)
|
|
|
|
func get_snapping() -> bool:
|
|
return _snapping
|
|
|
|
func get_fine_snapping() -> bool:
|
|
return _fine_snapping
|
|
|
|
func _init() -> void:
|
|
create_material("main", Color(1, 0.3725, 0.3725, 0.5))
|
|
create_material("selected", Color(0, 0, 1, 0.1))
|
|
create_handle_material("proto_handler", false, load("res://addons/proto_shape/icon/proto-gizmo-handler.png"))
|
|
|
|
func _has_gizmo(node: Node3D) -> bool:
|
|
if node.get_parent() is ProtoGizmoWrapper or node is ProtoRamp:
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
func _get_gizmo_name() -> String:
|
|
return "ProtoGizmo"
|
|
|
|
func _redraw(gizmo: EditorNode3DGizmo) -> void:
|
|
var node := gizmo.get_node_3d()
|
|
if node is ProtoRamp:
|
|
node.gizmos.redraw_gizmos(gizmo, self)
|
|
return
|
|
if node.get_parent() is ProtoGizmoWrapper:
|
|
node.get_parent().redraw_gizmos_for_child(gizmo, self)
|
|
return
|
|
|
|
func _set_handle(
|
|
gizmo: EditorNode3DGizmo,
|
|
handle_id: int,
|
|
secondary: bool,
|
|
camera: Camera3D,
|
|
screen_pos: Vector2) -> void:
|
|
var node := gizmo.get_node_3d()
|
|
if node is ProtoRamp:
|
|
node.gizmos.set_handle(gizmo, self, handle_id, secondary, camera, screen_pos)
|
|
return
|
|
if node.get_parent() is ProtoGizmoWrapper:
|
|
node.get_parent().set_handle_for_child(gizmo, self, handle_id, secondary, camera, screen_pos)
|
|
return
|
|
|
|
func _commit_handle(
|
|
gizmo: EditorNode3DGizmo,
|
|
handle_id: int,
|
|
secondary: bool,
|
|
restore: Variant,
|
|
cancel: bool) -> void:
|
|
var node := gizmo.get_node_3d()
|
|
if node is ProtoRamp:
|
|
node.gizmos.commit_handle(gizmo, handle_id, secondary, restore, cancel)
|
|
return
|
|
if node.get_parent() is ProtoGizmoWrapper:
|
|
node.get_parent().commit_handle_for_child(gizmo, handle_id, secondary, restore, cancel)
|
|
return
|