Fixed buggy free hand translation on touchscreens.
This commit is contained in:
parent
a4b7de996b
commit
5f9545ff37
|
@ -4,7 +4,7 @@ extends Node2D
|
|||
var image := Image.new()
|
||||
var table := ImageTexture.new()
|
||||
|
||||
onready var Util = preload("res://Util.gd")
|
||||
onready var Util = preload("res://addons/summer_day/utilities/math_helper.gd")
|
||||
|
||||
var corners = [
|
||||
Vector2(-0.4, -0.4),
|
||||
|
|
|
@ -15,15 +15,12 @@ func _ready():
|
|||
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
|
||||
|
||||
|
||||
func _gui_input(event):
|
||||
tool_pool.run_most_prior(event, tool_context)
|
||||
|
||||
|
||||
func _input(event):
|
||||
var allow_pass = false
|
||||
var pos = event.get("position")
|
||||
if pos == null:
|
||||
allow_pass = true
|
||||
else:
|
||||
if get_rect().has_point(get_local_mouse_position()):
|
||||
allow_pass = true
|
||||
if allow_pass:
|
||||
if event is InputEventScreenTouch and !event.is_pressed():
|
||||
tool_pool.run_most_prior(event, tool_context)
|
||||
|
||||
|
||||
|
|
|
@ -14,13 +14,6 @@ border_color = Color( 0.121569, 0.113725, 0.133333, 1 )
|
|||
|
||||
[sub_resource type="GDScript" id=4]
|
||||
script/source = "extends ViewportContainer
|
||||
|
||||
|
||||
func _gui_input(event):
|
||||
pass
|
||||
|
||||
func _clips_input():
|
||||
pass
|
||||
"
|
||||
|
||||
[sub_resource type="Environment" id=1]
|
||||
|
@ -47,6 +40,8 @@ margin_left = 1.0
|
|||
margin_top = 1.0
|
||||
margin_right = 999.0
|
||||
margin_bottom = 575.0
|
||||
mouse_filter = 1
|
||||
input_pass_on_modal_close_click = false
|
||||
stretch = true
|
||||
script = SubResource( 4 )
|
||||
__meta__ = {
|
||||
|
|
|
@ -35,27 +35,56 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext):
|
|||
return false
|
||||
|
||||
func _run(event: InputEvent, tool_context: SummerDayToolContext):
|
||||
var jump := Transform2D.IDENTITY
|
||||
# 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.xform(initial_touches[0])
|
||||
# var offset = current_touches[0] - transformed_initial_touch
|
||||
#
|
||||
# #print(jump)
|
||||
# jump.origin = offset
|
||||
# #jump = jump.translated(offset)
|
||||
# #print(jump)
|
||||
#
|
||||
# var transform = jump * initial_transform
|
||||
# #print(transform)
|
||||
|
||||
# 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
|
||||
var init_set = [
|
||||
initial_touches[0],
|
||||
initial_touches[1],
|
||||
(initial_touches[1] - initial_touches[0]).tangent() + initial_touches[1],
|
||||
(initial_touches[1] - initial_touches[0]).tangent() + initial_touches[0],
|
||||
]
|
||||
|
||||
var curr_set = [
|
||||
current_touches[0],
|
||||
current_touches[1],
|
||||
(current_touches[1] - current_touches[0]).tangent() + current_touches[1],
|
||||
(current_touches[1] - current_touches[0]).tangent() + current_touches[0],
|
||||
]
|
||||
|
||||
var basis = SummerDayMathHelper.basis_from_to_points(
|
||||
init_set[0], init_set[1], init_set[2], init_set[3],
|
||||
curr_set[0], curr_set[1], curr_set[2], curr_set[3]
|
||||
)
|
||||
|
||||
#print(basis)
|
||||
|
||||
var transform = Transform2D(
|
||||
Vector2(basis.x.x, basis.x.y),
|
||||
Vector2(basis.y.x, basis.y.y),
|
||||
Vector2(basis.z.x, basis.z.y)
|
||||
) * initial_transform
|
||||
tool_context.canvas_state.canvas_transform = transform
|
||||
|
|
|
@ -2,3 +2,13 @@ extends SummerDayTool
|
|||
class_name SummerDayHandCanvasTool
|
||||
|
||||
|
||||
func _init():
|
||||
priority = 1
|
||||
|
||||
|
||||
func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext):
|
||||
pass
|
||||
|
||||
|
||||
func _run(event: InputEvent, tool_context: SummerDayToolContext):
|
||||
pass
|
||||
|
|
|
@ -3,9 +3,10 @@ class_name SummerDayCanvasToolPool
|
|||
|
||||
|
||||
func _init():
|
||||
persistent_tool_pool.append(
|
||||
SummerDayFreeTransformCanvasTool.new()
|
||||
)
|
||||
persistent_tool_pool = [
|
||||
SummerDayFreeTransformCanvasTool.new(),
|
||||
SummerDayHandCanvasTool.new()
|
||||
]
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
|
|
|
@ -4,6 +4,7 @@ class_name SummerDayToolContext
|
|||
|
||||
var edited_scene: SummerDayScene
|
||||
var canvas_state: SummerDayCanvasState
|
||||
var local_mouse_position: Vector2
|
||||
|
||||
|
||||
func _on_SummerDay_scene_changed(new_scene):
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
extends Node
|
||||
class_name SummerDayMathHelper
|
||||
|
||||
|
||||
static func matrix_to_points(
|
|
@ -74,6 +74,11 @@ _global_script_classes=[ {
|
|||
"language": "GDScript",
|
||||
"path": "res://addons/summer_day/main_screen.gd"
|
||||
}, {
|
||||
"base": "Node",
|
||||
"class": "SummerDayMathHelper",
|
||||
"language": "GDScript",
|
||||
"path": "res://addons/summer_day/utilities/math_helper.gd"
|
||||
}, {
|
||||
"base": "Resource",
|
||||
"class": "SummerDayScene",
|
||||
"language": "GDScript",
|
||||
|
@ -118,6 +123,7 @@ _global_script_class_icons={
|
|||
"SummerDayFreeTransformCanvasTool": "",
|
||||
"SummerDayHandCanvasTool": "",
|
||||
"SummerDayMainScreen": "",
|
||||
"SummerDayMathHelper": "",
|
||||
"SummerDayScene": "",
|
||||
"SummerDayTimeline": "",
|
||||
"SummerDayTool": "",
|
||||
|
@ -134,7 +140,11 @@ config/icon="res://icon.png"
|
|||
|
||||
[autoload]
|
||||
|
||||
Util="res://Util.gd"
|
||||
Util="res://addons/summer_day/utilities/math_helper.gd"
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PoolStringArray( "res://addons/summer_day/plugin.cfg" )
|
||||
|
||||
[gdnative]
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user