2021-11-21 11:46:04 +01:00
extends SummerDayTool
class_name SummerDayFreeTransformCanvasTool
2021-11-21 13:44:46 +01:00
var touch_dict = { }
var initial_touches
var current_touches
var initial_transform : Transform2D
2021-11-21 11:46:04 +01:00
func _init ( ) :
priority = 1
func _check_for_use ( event : InputEvent , tool_context : SummerDayToolContext ) :
2021-11-21 13:44:46 +01:00
if event is InputEventScreenTouch :
if event . pressed :
touch_dict [ event . index ] = event . position
else :
touch_dict . erase ( event . index )
if touch_dict . size ( ) == 2 :
initial_transform = tool_context . canvas_state . canvas_transform
var keys = touch_dict . keys ( )
initial_touches = [ touch_dict [ keys [ 0 ] ] , touch_dict [ keys [ 1 ] ] ]
print ( touch_dict )
2021-11-21 11:46:04 +01:00
if event is InputEventScreenDrag :
2021-11-21 13:44:46 +01:00
touch_dict [ event . index ] = event . position
if touch_dict . size ( ) == 2 :
var keys = touch_dict . keys ( )
current_touches = [ touch_dict [ keys [ 0 ] ] , touch_dict [ keys [ 1 ] ] ]
return true
return false
2021-11-21 11:46:04 +01:00
func _run ( event : InputEvent , tool_context : SummerDayToolContext ) :
2021-11-21 13:44:46 +01:00
var jump : = Transform2D . IDENTITY
# Calculate scale.
var initial_distance = initial_touches [ 0 ] . distance_to ( initial_touches [ 1 ] )
var current_distance = current_touches [ 0 ] . distance_to ( current_touches [ 1 ] )
var scale = current_distance / initial_distance
# Calculate rotation.
var initial_angle = initial_touches [ 0 ] . angle_to_point ( initial_touches [ 1 ] )
var current_angle = current_touches [ 0 ] . angle_to_point ( current_touches [ 1 ] )
var rotation = current_angle - initial_angle
jump = jump . scaled ( Vector2 ( scale , scale ) ) . rotated ( rotation )
# Calculate origin.
var transformed_initial_touch = jump . basis_xform ( initial_touches [ 0 ] )
var offset = current_touches [ 0 ] - transformed_initial_touch
print ( jump )
jump = Transform2D ( Vector2 . RIGHT , Vector2 . DOWN , offset ) * jump
print ( jump )
var transform = jump * initial_transform
2021-11-21 11:46:04 +01:00
tool_context . canvas_state . canvas_transform = transform