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 image := Image.new()
|
||||||
var table := ImageTexture.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 = [
|
var corners = [
|
||||||
Vector2(-0.4, -0.4),
|
Vector2(-0.4, -0.4),
|
||||||
|
|
|
@ -15,15 +15,12 @@ func _ready():
|
||||||
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
|
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
|
||||||
|
|
||||||
|
|
||||||
|
func _gui_input(event):
|
||||||
|
tool_pool.run_most_prior(event, tool_context)
|
||||||
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
var allow_pass = false
|
if event is InputEventScreenTouch and !event.is_pressed():
|
||||||
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:
|
|
||||||
tool_pool.run_most_prior(event, tool_context)
|
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]
|
[sub_resource type="GDScript" id=4]
|
||||||
script/source = "extends ViewportContainer
|
script/source = "extends ViewportContainer
|
||||||
|
|
||||||
|
|
||||||
func _gui_input(event):
|
|
||||||
pass
|
|
||||||
|
|
||||||
func _clips_input():
|
|
||||||
pass
|
|
||||||
"
|
"
|
||||||
|
|
||||||
[sub_resource type="Environment" id=1]
|
[sub_resource type="Environment" id=1]
|
||||||
|
@ -47,6 +40,8 @@ margin_left = 1.0
|
||||||
margin_top = 1.0
|
margin_top = 1.0
|
||||||
margin_right = 999.0
|
margin_right = 999.0
|
||||||
margin_bottom = 575.0
|
margin_bottom = 575.0
|
||||||
|
mouse_filter = 1
|
||||||
|
input_pass_on_modal_close_click = false
|
||||||
stretch = true
|
stretch = true
|
||||||
script = SubResource( 4 )
|
script = SubResource( 4 )
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
|
|
|
@ -35,27 +35,56 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext):
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func _run(event: InputEvent, tool_context: SummerDayToolContext):
|
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 init_set = [
|
||||||
var initial_distance = initial_touches[0].distance_to(initial_touches[1])
|
initial_touches[0],
|
||||||
var current_distance = current_touches[0].distance_to(current_touches[1])
|
initial_touches[1],
|
||||||
var scale = current_distance / initial_distance
|
(initial_touches[1] - initial_touches[0]).tangent() + initial_touches[1],
|
||||||
|
(initial_touches[1] - initial_touches[0]).tangent() + initial_touches[0],
|
||||||
# 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 curr_set = [
|
||||||
var rotation = current_angle - initial_angle
|
current_touches[0],
|
||||||
|
current_touches[1],
|
||||||
jump = jump.scaled(Vector2(scale, scale)).rotated(rotation)
|
(current_touches[1] - current_touches[0]).tangent() + current_touches[1],
|
||||||
|
(current_touches[1] - current_touches[0]).tangent() + current_touches[0],
|
||||||
# Calculate origin.
|
]
|
||||||
var transformed_initial_touch = jump.basis_xform(initial_touches[0])
|
|
||||||
var offset = current_touches[0] - transformed_initial_touch
|
var basis = SummerDayMathHelper.basis_from_to_points(
|
||||||
|
init_set[0], init_set[1], init_set[2], init_set[3],
|
||||||
print(jump)
|
curr_set[0], curr_set[1], curr_set[2], curr_set[3]
|
||||||
jump = Transform2D(Vector2.RIGHT, Vector2.DOWN, offset) * jump
|
)
|
||||||
print(jump)
|
|
||||||
|
#print(basis)
|
||||||
var transform = jump * initial_transform
|
|
||||||
|
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
|
tool_context.canvas_state.canvas_transform = transform
|
||||||
|
|
|
@ -2,3 +2,13 @@ extends SummerDayTool
|
||||||
class_name SummerDayHandCanvasTool
|
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():
|
func _init():
|
||||||
persistent_tool_pool.append(
|
persistent_tool_pool = [
|
||||||
SummerDayFreeTransformCanvasTool.new()
|
SummerDayFreeTransformCanvasTool.new(),
|
||||||
)
|
SummerDayHandCanvasTool.new()
|
||||||
|
]
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
#func _process(delta):
|
#func _process(delta):
|
||||||
|
|
|
@ -4,6 +4,7 @@ class_name SummerDayToolContext
|
||||||
|
|
||||||
var edited_scene: SummerDayScene
|
var edited_scene: SummerDayScene
|
||||||
var canvas_state: SummerDayCanvasState
|
var canvas_state: SummerDayCanvasState
|
||||||
|
var local_mouse_position: Vector2
|
||||||
|
|
||||||
|
|
||||||
func _on_SummerDay_scene_changed(new_scene):
|
func _on_SummerDay_scene_changed(new_scene):
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
class_name SummerDayMathHelper
|
||||||
|
|
||||||
|
|
||||||
static func matrix_to_points(
|
static func matrix_to_points(
|
|
@ -74,6 +74,11 @@ _global_script_classes=[ {
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://addons/summer_day/main_screen.gd"
|
"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",
|
"base": "Resource",
|
||||||
"class": "SummerDayScene",
|
"class": "SummerDayScene",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
|
@ -118,6 +123,7 @@ _global_script_class_icons={
|
||||||
"SummerDayFreeTransformCanvasTool": "",
|
"SummerDayFreeTransformCanvasTool": "",
|
||||||
"SummerDayHandCanvasTool": "",
|
"SummerDayHandCanvasTool": "",
|
||||||
"SummerDayMainScreen": "",
|
"SummerDayMainScreen": "",
|
||||||
|
"SummerDayMathHelper": "",
|
||||||
"SummerDayScene": "",
|
"SummerDayScene": "",
|
||||||
"SummerDayTimeline": "",
|
"SummerDayTimeline": "",
|
||||||
"SummerDayTool": "",
|
"SummerDayTool": "",
|
||||||
|
@ -134,7 +140,11 @@ config/icon="res://icon.png"
|
||||||
|
|
||||||
[autoload]
|
[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]
|
[gdnative]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user