From 831145dda85e5f8e892400726d5bfc76bb92b2f4 Mon Sep 17 00:00:00 2001 From: Mono Date: Sat, 27 Nov 2021 11:27:42 +0100 Subject: [PATCH] Now also implemented rotation tool. --- .../tool/canvas/tools/general_use/hand.gd | 1 + .../tool/canvas/tools/general_use/rotation.gd | 40 +++++++++++++++++++ .../tool/canvas/tools/general_use/zoom.gd | 1 + .../summer_day/tool/canvas/tools/tool_pool.gd | 1 + project.godot | 10 +++-- 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 addons/summer_day/tool/canvas/tools/general_use/rotation.gd diff --git a/addons/summer_day/tool/canvas/tools/general_use/hand.gd b/addons/summer_day/tool/canvas/tools/general_use/hand.gd index 53d92d3..952fcfa 100644 --- a/addons/summer_day/tool/canvas/tools/general_use/hand.gd +++ b/addons/summer_day/tool/canvas/tools/general_use/hand.gd @@ -4,6 +4,7 @@ class_name SummerDayHandCanvasTool func _init(): priority = 1 + modifier_layer = 1 var hand_grabbed = false diff --git a/addons/summer_day/tool/canvas/tools/general_use/rotation.gd b/addons/summer_day/tool/canvas/tools/general_use/rotation.gd new file mode 100644 index 0000000..566bc22 --- /dev/null +++ b/addons/summer_day/tool/canvas/tools/general_use/rotation.gd @@ -0,0 +1,40 @@ +extends SummerDayTool +class_name SummerDayRotationCanvasTool + + +var rotation_activated := false +var initial_transform: Transform2D +var initial_angle: float + + +func _init(): + priority = 1 + modifier_layer = 2 + + +func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + if event.is_pressed() and event.shift and event.control: + initial_transform = tool_context.canvas_state.canvas_transform + var canvas_center = tool_context.canvas_state.rect_size * 0.5 + initial_angle = event.position.angle_to_point(canvas_center) + rotation_activated = true + else: + rotation_activated = false + + if event is InputEventMouseMotion: + return rotation_activated + + return false + + +func _run(event: InputEvent, tool_context: SummerDayToolContext): + var canvas_center = tool_context.canvas_state.rect_size * 0.5 + var canvas_transform = initial_transform + canvas_transform.origin -= canvas_center + var current_angle = event.position.angle_to_point(canvas_center) + var rotation_angle = current_angle - initial_angle + canvas_transform = canvas_transform.rotated(rotation_angle) + canvas_transform.origin += canvas_center + tool_context.canvas_state.canvas_transform = canvas_transform diff --git a/addons/summer_day/tool/canvas/tools/general_use/zoom.gd b/addons/summer_day/tool/canvas/tools/general_use/zoom.gd index afb683c..998f391 100644 --- a/addons/summer_day/tool/canvas/tools/general_use/zoom.gd +++ b/addons/summer_day/tool/canvas/tools/general_use/zoom.gd @@ -9,6 +9,7 @@ var initial_mouse_position: Vector2 func _init(): priority = 1 + modifier_layer = 1 func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): diff --git a/addons/summer_day/tool/canvas/tools/tool_pool.gd b/addons/summer_day/tool/canvas/tools/tool_pool.gd index d2b65bc..dd93047 100644 --- a/addons/summer_day/tool/canvas/tools/tool_pool.gd +++ b/addons/summer_day/tool/canvas/tools/tool_pool.gd @@ -7,6 +7,7 @@ func _init(): SummerDayFreeTransformCanvasTool.new(), SummerDayHandCanvasTool.new(), SummerDayZoomCanvasTool.new(), + SummerDayRotationCanvasTool.new(), ] # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/project.godot b/project.godot index 5c0db88..22afcad 100644 --- a/project.godot +++ b/project.godot @@ -79,6 +79,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/utilities/math_helper.gd" }, { +"base": "SummerDayTool", +"class": "SummerDayRotationCanvasTool", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/tools/general_use/rotation.gd" +}, { "base": "Resource", "class": "SummerDayScene", "language": "GDScript", @@ -129,6 +134,7 @@ _global_script_class_icons={ "SummerDayHandCanvasTool": "", "SummerDayMainScreen": "", "SummerDayMathHelper": "", +"SummerDayRotationCanvasTool": "", "SummerDayScene": "", "SummerDayTimeline": "", "SummerDayTool": "", @@ -148,10 +154,6 @@ config/icon="res://icon.png" Util="res://addons/summer_day/utilities/math_helper.gd" -[editor_plugins] - -enabled=PoolStringArray( "res://addons/summer_day/plugin.cfg" ) - [gdnative] singletons=[ "res://addons/godot-git-plugin/git_api.gdnlib" ]