generated from SGDA/GodotExampleProject
36 lines
1.2 KiB
GDScript
36 lines
1.2 KiB
GDScript
## Converts a position input in viewport coordinates (e.g. from the mouse position input)
|
|
## into canvas coordinates (e.g. 2D world coordinates). Useful to get a 2D 'world' position.
|
|
@tool
|
|
class_name GUIDEModifierCanvasCoordinates
|
|
extends GUIDEModifier
|
|
|
|
## If checked, the input will be treated as relative input (position change)
|
|
## rather than absolute input (position).
|
|
@export var relative_input:bool:
|
|
set(value):
|
|
relative_input = value
|
|
emit_changed()
|
|
|
|
func _modify_input(input:Vector3, delta:float, value_type:GUIDEAction.GUIDEActionValueType) -> Vector3:
|
|
if not input.is_finite():
|
|
return Vector3.INF
|
|
|
|
var viewport = Engine.get_main_loop().root
|
|
var transform = viewport.canvas_transform.affine_inverse()
|
|
var coordinates = transform * Vector2(input.x, input.y)
|
|
|
|
if relative_input:
|
|
var origin = transform * Vector2.ZERO
|
|
coordinates -= origin
|
|
|
|
return Vector3(coordinates.x, coordinates.y, input.z)
|
|
|
|
|
|
func _editor_name() -> String:
|
|
return "Canvas coordinates"
|
|
|
|
|
|
func _editor_description() -> String:
|
|
return "Converts a position input in viewport coordinates (e.g. from the mouse position input)\n" + \
|
|
"into canvas coordinates (e.g. 2D world coordinates). Useful to get a 2D 'world' position."
|