Implemented hand and zoom tools.

This commit is contained in:
Mono 2021-11-27 09:16:34 +01:00
parent e882a33322
commit 1e77a3868d
6 changed files with 83 additions and 5 deletions

View File

@ -4,4 +4,4 @@
[resource]
script = ExtResource( 1 )
aspect_ratio = Vector2( 16, 9 )
aspect_ratio = Vector2( 13.134, 9 )

View File

@ -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",

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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" ]