From 1e77a3868dc9129706c66573b174aa4368e6e8fe Mon Sep 17 00:00:00 2001 From: Mono Date: Sat, 27 Nov 2021 09:16:34 +0100 Subject: [PATCH] Implemented hand and zoom tools. --- Bullshit/scene_073.tres | 2 +- addons/summer_day/summer_day.gd | 2 +- .../tool/canvas/tools/general_use/hand.gd | 16 +++++- .../tool/canvas/tools/general_use/zoom.gd | 55 +++++++++++++++++++ .../summer_day/tool/canvas/tools/tool_pool.gd | 3 +- project.godot | 10 ++++ 6 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 addons/summer_day/tool/canvas/tools/general_use/zoom.gd diff --git a/Bullshit/scene_073.tres b/Bullshit/scene_073.tres index ec7cb1d..0ea4c7e 100644 --- a/Bullshit/scene_073.tres +++ b/Bullshit/scene_073.tres @@ -4,4 +4,4 @@ [resource] script = ExtResource( 1 ) -aspect_ratio = Vector2( 16, 9 ) +aspect_ratio = Vector2( 13.134, 9 ) diff --git a/addons/summer_day/summer_day.gd b/addons/summer_day/summer_day.gd index 2323083..cf91fe5 100644 --- a/addons/summer_day/summer_day.gd +++ b/addons/summer_day/summer_day.gd @@ -34,7 +34,7 @@ func _enter_tree(): add_control_to_bottom_panel(timeline_instance, "SummerDay Timeline") add_custom_type("SummerDayScene", "Resource", - load("res://addons/summer_day/data_structure/scene/scene.gd"), + load("res://addons/summer_day/data/scene/scene.gd"), get_editor_interface().get_base_control().get_icon("Animation", "EditorIcons")) add_custom_type("SummerDayDisplay", "Control", 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 67bc540..53d92d3 100644 --- a/addons/summer_day/tool/canvas/tools/general_use/hand.gd +++ b/addons/summer_day/tool/canvas/tools/general_use/hand.gd @@ -6,9 +6,21 @@ func _init(): priority = 1 +var hand_grabbed = false + + func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): - pass + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT: + hand_grabbed = event.is_pressed() and event.control + if event.button_index == BUTTON_MIDDLE: + hand_grabbed = event.is_pressed() + + if event is InputEventMouseMotion: + return hand_grabbed + + return false func _run(event: InputEvent, tool_context: SummerDayToolContext): - pass + tool_context.canvas_state.canvas_transform.origin += event.relative diff --git a/addons/summer_day/tool/canvas/tools/general_use/zoom.gd b/addons/summer_day/tool/canvas/tools/general_use/zoom.gd new file mode 100644 index 0000000..afb683c --- /dev/null +++ b/addons/summer_day/tool/canvas/tools/general_use/zoom.gd @@ -0,0 +1,55 @@ +extends SummerDayTool +class_name SummerDayZoomCanvasTool + + +var zoom_activated := false +var initial_transform: Transform2D +var initial_mouse_position: Vector2 + + +func _init(): + priority = 1 + + +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: + initial_transform = tool_context.canvas_state.canvas_transform + initial_mouse_position = event.position + zoom_activated = true + else: + zoom_activated = false + elif event.factor != 0.0: + initial_transform = tool_context.canvas_state.canvas_transform + return true + + if event is InputEventMouseMotion: + return zoom_activated + + return false + + +func _run(event: InputEvent, tool_context: SummerDayToolContext): + var zoom_point + var zoom_strength + + if event is InputEventMouseButton: + print(event.button_index) + print(event.button_mask) + print(event.factor) + print("\n") + zoom_point = event.position + zoom_strength = event.factor + if event.button_index == BUTTON_WHEEL_DOWN: + zoom_strength = -event.factor + if event is InputEventMouseMotion: + zoom_point = initial_mouse_position + zoom_strength = (event.position.x - initial_mouse_position.x) * 0.5 + + var canvas_transform = initial_transform + canvas_transform.origin -= zoom_point + var scale = pow(1.03, zoom_strength) + canvas_transform = canvas_transform.scaled(Vector2(scale, scale)) + canvas_transform.origin += zoom_point + tool_context.canvas_state.canvas_transform = canvas_transform diff --git a/addons/summer_day/tool/canvas/tools/tool_pool.gd b/addons/summer_day/tool/canvas/tools/tool_pool.gd index 2af69e5..d2b65bc 100644 --- a/addons/summer_day/tool/canvas/tools/tool_pool.gd +++ b/addons/summer_day/tool/canvas/tools/tool_pool.gd @@ -5,7 +5,8 @@ class_name SummerDayCanvasToolPool func _init(): persistent_tool_pool = [ SummerDayFreeTransformCanvasTool.new(), - SummerDayHandCanvasTool.new() + SummerDayHandCanvasTool.new(), + SummerDayZoomCanvasTool.new(), ] # Called every frame. 'delta' is the elapsed time since the previous frame. diff --git a/project.godot b/project.godot index 02eb062..5c0db88 100644 --- a/project.godot +++ b/project.godot @@ -104,6 +104,11 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://addons/summer_day/tool/tool_system/tool_pool.gd" }, { +"base": "SummerDayTool", +"class": "SummerDayZoomCanvasTool", +"language": "GDScript", +"path": "res://addons/summer_day/tool/canvas/tools/general_use/zoom.gd" +}, { "base": "OH", "class": "VeryWorse", "language": "GDScript", @@ -129,6 +134,7 @@ _global_script_class_icons={ "SummerDayTool": "", "SummerDayToolContext": "", "SummerDayToolPool": "", +"SummerDayZoomCanvasTool": "", "VeryWorse": "" } @@ -142,6 +148,10 @@ 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" ]