diff --git a/addons/summer_day/summer_day.gd b/addons/summer_day/summer_day.gd index 0584278..8032c72 100644 --- a/addons/summer_day/summer_day.gd +++ b/addons/summer_day/summer_day.gd @@ -3,29 +3,22 @@ extends EditorPlugin signal document_changed(new_doc) -const MainScreen = preload("res://addons/summer_day/main_screen.tscn") -const Timeline = preload("res://addons/summer_day/user_interface/timeline/timeline.tscn") -const ScenePicker = preload("res://addons/summer_day/user_interface/resource_picker/scene_picker.gd") - -var Canvas: SummerDayCanvas - -var main_screen_instance: SummerDayMainScreen -var timeline_instance: SummerDayTimeline -var scene_picker_instance: SummerDayScenePicker - -var tool_context := SummerDayToolContext.new() +var MainScreen +var Timeline +var Document +var canvas_instance +var main_screen_instance +var timeline_instance func _enter_tree(): + _initilize() + main_screen_instance = MainScreen.instance() - Canvas = main_screen_instance.get_node("Canvas") - Canvas.tool_context = tool_context + canvas_instance = main_screen_instance.get_node("Canvas") self.connect("document_changed", - Canvas, "_on_SummerDay_document_changed") - self.connect("document_changed", - tool_context, "_on_SummerDay_document_changed" - ) + canvas_instance, "_on_SummerDay_document_changed") # Add the main panel to the editor's main viewport. get_editor_interface().get_editor_viewport().add_child(main_screen_instance) # Hide the main panel. Very much required. @@ -36,10 +29,6 @@ func _enter_tree(): add_control_to_bottom_panel(timeline_instance, "SummerDay Timeline") - scene_picker_instance = ScenePicker.new() - add_inspector_plugin(scene_picker_instance) - - add_custom_type("SummerDayDocument", "Resource", load("res://addons/summer_day/data/document/document.gd"), get_editor_interface().get_base_control().get_icon("Animation", "EditorIcons")) @@ -55,7 +44,10 @@ func _exit_tree(): remove_custom_type("SummerDayDocument") remove_custom_type("SummerDayDisplay") remove_control_from_bottom_panel(timeline_instance) - remove_inspector_plugin(scene_picker_instance) + + +func disable_plugin(): + remove_autoload_singleton("SummerDay") func has_main_screen(): @@ -73,12 +65,14 @@ func make_visible(visible): func handles(object): - if object is SummerDayDocument: + if object is Document: return true func edit(object): - emit_signal("document_changed", object) + if object != $"/root/SummerDay".document: + $"/root/SummerDay".document = object + emit_signal("document_changed", object) func get_plugin_name(): @@ -87,3 +81,13 @@ func get_plugin_name(): func get_plugin_icon(): return get_editor_interface().get_base_control().get_icon("AnimationPlayer", "EditorIcons") + + +func _initilize(): + add_autoload_singleton( + "SummerDay", + "res://addons/summer_day/utilities/summer_day_globals.gd" + ) + MainScreen = load("res://addons/summer_day/main_screen.tscn") + Timeline = load("res://addons/summer_day/user_interface/timeline/timeline.tscn") + Document = load("res://addons/summer_day/data/document/document.gd") diff --git a/addons/summer_day/tools/canvas/general_use/free_transform.gd b/addons/summer_day/tools/canvas/free_transform.gd similarity index 85% rename from addons/summer_day/tools/canvas/general_use/free_transform.gd rename to addons/summer_day/tools/canvas/free_transform.gd index 635659c..7ce6c73 100644 --- a/addons/summer_day/tools/canvas/general_use/free_transform.gd +++ b/addons/summer_day/tools/canvas/free_transform.gd @@ -16,14 +16,14 @@ func _handle_global_input(event: InputEvent): pass -func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): +func _check_for_use(event: InputEvent): if event is InputEventScreenTouch: if event.pressed: touch_dict[event.index] = event.position else: touch_dict.erase(event.index) if touch_dict.size() == 2: - initial_transform = tool_context.canvas_state.canvas_transform + initial_transform = SummerDay.canvas_state.canvas_transform var keys = touch_dict.keys() initial_touches = [touch_dict[keys[0]], touch_dict[keys[1]]] @@ -37,7 +37,7 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): return false -func _run(event: InputEvent, tool_context: SummerDayToolContext): +func _run(event: InputEvent): var init_set = [ initial_touches[0], initial_touches[1], @@ -62,4 +62,4 @@ func _run(event: InputEvent, tool_context: SummerDayToolContext): Vector2(basis.y.x, basis.y.y), Vector2(basis.z.x, basis.z.y) ) * initial_transform - tool_context.canvas_state.canvas_transform = transform + SummerDay.canvas_state.canvas_transform = transform diff --git a/addons/summer_day/tools/canvas/general_use/hand.gd b/addons/summer_day/tools/canvas/hand.gd similarity index 66% rename from addons/summer_day/tools/canvas/general_use/hand.gd rename to addons/summer_day/tools/canvas/hand.gd index e10d8e2..39fb65e 100644 --- a/addons/summer_day/tools/canvas/general_use/hand.gd +++ b/addons/summer_day/tools/canvas/hand.gd @@ -10,7 +10,7 @@ func _init(): var hand_grabbed = false -func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): +func _check_for_use(event: InputEvent): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: hand_grabbed = event.is_pressed() and event.alt @@ -23,5 +23,5 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): return false -func _run(event: InputEvent, tool_context: SummerDayToolContext): - tool_context.canvas_state.canvas_transform.origin += event.relative +func _run(event: InputEvent): + SummerDay.canvas_state.canvas_transform.origin += event.relative diff --git a/addons/summer_day/tools/canvas/general_use/pen.gd b/addons/summer_day/tools/canvas/pen.gd similarity index 55% rename from addons/summer_day/tools/canvas/general_use/pen.gd rename to addons/summer_day/tools/canvas/pen.gd index 4b076e3..c47cbe1 100644 --- a/addons/summer_day/tools/canvas/general_use/pen.gd +++ b/addons/summer_day/tools/canvas/pen.gd @@ -6,7 +6,7 @@ func _init(): priority = 1 -func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): +func _check_for_use(event: InputEvent): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT and event.is_pressed(): return true @@ -15,10 +15,10 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): return true -func _run(event: InputEvent, tool_context: SummerDayToolContext): - if tool_context.edited_document: +func _run(event: InputEvent): + if SummerDay.document: var transformed_event = event.xformed_by( - tool_context.canvas_state.inverse_view_transform + SummerDay.canvas_state.inverse_view_transform ) - for track in tool_context.edited_document.tracks: + for track in SummerDay.document.tracks: track.pass_local_input(transformed_event) diff --git a/addons/summer_day/tools/canvas/general_use/rotation.gd b/addons/summer_day/tools/canvas/rotation.gd similarity index 68% rename from addons/summer_day/tools/canvas/general_use/rotation.gd rename to addons/summer_day/tools/canvas/rotation.gd index c87551e..7c5c44c 100644 --- a/addons/summer_day/tools/canvas/general_use/rotation.gd +++ b/addons/summer_day/tools/canvas/rotation.gd @@ -12,12 +12,12 @@ func _init(): modifier_layer = 2 -func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): +func _check_for_use(event: InputEvent): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: if event.is_pressed() and event.control and event.alt: - initial_transform = tool_context.canvas_state.canvas_transform - var canvas_center = tool_context.canvas_state.rect_size * 0.5 + initial_transform = SummerDay.canvas_state.canvas_transform + var canvas_center = SummerDay.canvas_state.rect_size * 0.5 initial_angle = event.position.angle_to_point(canvas_center) rotation_activated = true else: @@ -29,12 +29,12 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): return false -func _run(event: InputEvent, tool_context: SummerDayToolContext): - var canvas_center = tool_context.canvas_state.rect_size * 0.5 +func _run(event: InputEvent): + var canvas_center = SummerDay.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 + SummerDay.canvas_state.canvas_transform = canvas_transform diff --git a/addons/summer_day/tools/canvas/general_use/zoom.gd b/addons/summer_day/tools/canvas/zoom.gd similarity index 79% rename from addons/summer_day/tools/canvas/general_use/zoom.gd rename to addons/summer_day/tools/canvas/zoom.gd index be0d058..e65a3c3 100644 --- a/addons/summer_day/tools/canvas/general_use/zoom.gd +++ b/addons/summer_day/tools/canvas/zoom.gd @@ -19,17 +19,17 @@ func _handle_global_input(event: InputEvent): is_space_pressed = event.is_pressed() -func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): +func _check_for_use(event: InputEvent): if event is InputEventMouseButton: if event.button_index == BUTTON_LEFT: if event.is_pressed() and is_space_pressed: - initial_transform = tool_context.canvas_state.canvas_transform + initial_transform = SummerDay.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 + initial_transform = SummerDay.canvas_state.canvas_transform return true if event is InputEventMouseMotion: @@ -38,7 +38,7 @@ func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): return false -func _run(event: InputEvent, tool_context: SummerDayToolContext): +func _run(event: InputEvent): var zoom_point var zoom_strength @@ -56,4 +56,4 @@ func _run(event: InputEvent, tool_context: SummerDayToolContext): 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 + SummerDay.canvas_state.canvas_transform = canvas_transform diff --git a/addons/summer_day/tools/tool_system/base_tool.gd b/addons/summer_day/tools/tool_system/base_tool.gd index ab35886..ffb20d9 100644 --- a/addons/summer_day/tools/tool_system/base_tool.gd +++ b/addons/summer_day/tools/tool_system/base_tool.gd @@ -9,13 +9,11 @@ func _handle_global_input(event: InputEvent): # Virtual. pass -func _check_for_use( - event: InputEvent, tool_context: SummerDayToolContext -) -> bool: # Virtual. +func _check_for_use(event: InputEvent) -> bool: # Virtual. return false -func _run(event: InputEvent, tool_context: SummerDayToolContext): # Virtual. +func _run(event: InputEvent): # Virtual. pass diff --git a/addons/summer_day/tools/tool_system/tool_context.gd b/addons/summer_day/tools/tool_system/tool_context.gd deleted file mode 100644 index 0a04dcd..0000000 --- a/addons/summer_day/tools/tool_system/tool_context.gd +++ /dev/null @@ -1,12 +0,0 @@ -extends Reference -class_name SummerDayToolContext - - -var edited_document: SummerDayDocument -var canvas_state: SummerDayCanvasState -var position: Vector2 - - -func _on_SummerDay_document_changed(new_document): - edited_document = new_document - pass diff --git a/addons/summer_day/tools/tool_system/tool_pool.gd b/addons/summer_day/tools/tool_system/tool_pool.gd index 6e2e997..c0ddc02 100644 --- a/addons/summer_day/tools/tool_system/tool_pool.gd +++ b/addons/summer_day/tools/tool_system/tool_pool.gd @@ -12,15 +12,15 @@ func pass_global_input(event): func run_most_prior( - event: InputEvent, tool_context: SummerDayToolContext): + event: InputEvent): var priority_high_score = 0 var currently_most_prior: SummerDayTool = null for list in [persistent_tool_pool, modifiable_tool_pool]: for i in list: - if i._check_for_use(event, tool_context): + if i._check_for_use(event): var priority_score = i.get_priority_score() if priority_score > priority_high_score: priority_high_score = priority_score currently_most_prior = i if currently_most_prior != null: - currently_most_prior._run(event, tool_context) + currently_most_prior._run(event) diff --git a/addons/summer_day/user_interface/canvas/canvas.gd b/addons/summer_day/user_interface/canvas/canvas.gd index 6ac0571..6a7c0ea 100644 --- a/addons/summer_day/user_interface/canvas/canvas.gd +++ b/addons/summer_day/user_interface/canvas/canvas.gd @@ -3,17 +3,16 @@ extends PanelContainer class_name SummerDayCanvas onready var MeshContainer := $Render/RenderLayer/Container -onready var EditHints := $Render/ForegroundLayer/EditHints +onready var InteractionHint := $Render/RenderLayer/InteractionHint var document: SummerDayDocument var canvas_state := SummerDayCanvasState.new() var tool_pool := SummerDayCanvasToolPool.new() -var tool_context: SummerDayToolContext # Provided by plugin root. - func _ready(): - tool_context.canvas_state = canvas_state + SummerDay.canvas_state = canvas_state + SummerDay.interaction_hint = InteractionHint canvas_state.connect("view_transform_changed", self, "_on_view_transform_changed") canvas_state.connect("canvas_polygon_changed", @@ -21,11 +20,7 @@ func _ready(): func _gui_input(event): - if event.has_method("get_position"): - tool_context.position = canvas_state.view_transform.xform_inv( - event.position - ) - tool_pool.run_most_prior(event, tool_context) + tool_pool.run_most_prior(event) # _gui_input() cannot receive screen touch released event by itself. @@ -43,30 +38,28 @@ func drop_data(position, data): var file_path = data["files"][0] var instance = load(file_path) if instance is SummerDayBlueprint: - document.add_track(instance) + SummerDay.document.add_track(instance) func _on_SummerDay_document_changed(new_doc): - if new_doc != document: - document = new_doc - new_doc.connect("track_added", - MeshContainer, "_on_Document_add_track") - new_doc.setup_tracks() - canvas_state.update_fill_transform(new_doc) - new_doc.connect("resolution_changed", - self, "_on_scene_aspect_ratio_changed") - $Render/Label.text = str(new_doc) + "\n" + str(new_doc.resolution) - canvas_state.update_fill_transform(new_doc) + new_doc.connect("track_added", + MeshContainer, "_on_Document_add_track") + new_doc.setup_tracks() + canvas_state.update_fill_transform() + new_doc.connect("resolution_changed", + self, "_on_scene_aspect_ratio_changed") + $Render/Label.text = str(new_doc) + "\n" + str(new_doc.resolution) + canvas_state.update_fill_transform() func _on_Canvas_resized(): canvas_state.rect_size = rect_size canvas_state.update_canvas_to_clip_space() - canvas_state.update_fill_transform(document) + canvas_state.update_fill_transform() func _on_scene_aspect_ratio_changed(new_aspect_ratio): - canvas_state.update_fill_transform(document) + canvas_state.update_fill_transform() func _on_view_transform_changed(canvas_transform, spatial_transform): diff --git a/addons/summer_day/user_interface/canvas/canvas_state.gd b/addons/summer_day/user_interface/canvas/canvas_state.gd index d1d311f..c542643 100644 --- a/addons/summer_day/user_interface/canvas/canvas_state.gd +++ b/addons/summer_day/user_interface/canvas/canvas_state.gd @@ -26,11 +26,12 @@ func _init(): connect("canvas_transform_changed", self, "_update_view_transformation") -func update_fill_transform(document: SummerDayDocument): - if document == null: +func update_fill_transform(): + var doc = SummerDay.document + if doc == null: fill_transform = Transform2D.IDENTITY else: - var aspect_ratio = document.resolution.x / document.resolution.y + var aspect_ratio = doc.resolution.x / doc.resolution.y var size_ratio = rect_size.x / rect_size.y @@ -51,7 +52,7 @@ func update_fill_transform(document: SummerDayDocument): translation ) - _update_canvas_polygon(document) + _update_canvas_polygon() emit_signal("fill_transform_changed", fill_transform) @@ -79,15 +80,16 @@ func _set_canvas_transform(new_canvas_transform): emit_signal("canvas_transform_changed", canvas_transform) -func _update_canvas_polygon(document: SummerDayDocument): - if document == null: +func _update_canvas_polygon(): + var doc = SummerDay.document + if doc == null: _canvas_polygon = PoolVector2Array() return _canvas_polygon = PoolVector2Array( [ Vector2.ZERO, - Vector2(document.raw_aspect_ratio, 0.0), - Vector2(document.raw_aspect_ratio, 1.0), + Vector2(doc.raw_aspect_ratio, 0.0), + Vector2(doc.raw_aspect_ratio, 1.0), Vector2(0.0, 1.0) ] ) diff --git a/addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd b/addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd index a6f1c2c..3c1d015 100644 --- a/addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd +++ b/addons/summer_day/user_interface/canvas/rendering/interaction_hint.gd @@ -7,9 +7,8 @@ var canvas_state: SummerDayCanvasState # Provided through Canvas. func draw_dot(position: Vector3, color: Color): - var transformed_position = canvas_state.clip_space_view_transform.xform( - position - ) + var transformation = SummerDay.canvas_state.clip_space_view_transform + var transformed_position = transformation.xform(position) var radius = 3.0 var vertex_count = 12.0 @@ -24,12 +23,9 @@ func draw_dot(position: Vector3, color: Color): func draw_line(position_1: Vector3, position_2: Vector3, color: Color): - var transformed_position_1 = canvas_state.clip_space_view_transform.xform( - position_1 - ) - var transformed_position_2 = canvas_state.clip_space_view_transform.xform( - position_2 - ) + var transformation = SummerDay.canvas_state.clip_space_view_transform + var transformed_position_1 = transformation.xform(position_1) + var transformed_position_2 = transformation.xform(position_2) begin(Mesh.PRIMITIVE_LINES) set_color(color) diff --git a/addons/summer_day/utilities/summer_day_globals.gd b/addons/summer_day/utilities/summer_day_globals.gd index ec0130a..e4c5bae 100644 --- a/addons/summer_day/utilities/summer_day_globals.gd +++ b/addons/summer_day/utilities/summer_day_globals.gd @@ -1,4 +1,7 @@ +tool extends Node -#var canvas_state: SummerDayCanvasState +var document: SummerDayDocument +var canvas_state: SummerDayCanvasState +var interaction_hint: SummerDayInteractionHint diff --git a/production/ann.tres b/production/ann.tres index 0b7b3c0..8d2b53e 100644 --- a/production/ann.tres +++ b/production/ann.tres @@ -9,6 +9,7 @@ [sub_resource type="Resource" id=1] script = ExtResource( 6 ) +vertices = PoolVector2Array( -0.4, -0.4, 0.1, -0.4, 0.1, 0.1, -0.4, 0.1, -0.1, -0.1, 0.4, -0.1, 0.4, 0.4, -0.1, 0.4 ) [sub_resource type="Resource" id=2] script = ExtResource( 3 ) diff --git a/project.godot b/project.godot index a70126f..e9cbebb 100644 --- a/project.godot +++ b/project.godot @@ -87,12 +87,12 @@ _global_script_classes=[ { "base": "SummerDayTool", "class": "SummerDayFreeTransformCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/general_use/free_transform.gd" +"path": "res://addons/summer_day/tools/canvas/free_transform.gd" }, { "base": "SummerDayTool", "class": "SummerDayHandCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/general_use/hand.gd" +"path": "res://addons/summer_day/tools/canvas/hand.gd" }, { "base": "ImmediateGeometry", "class": "SummerDayInteractionHint", @@ -117,12 +117,12 @@ _global_script_classes=[ { "base": "SummerDayTool", "class": "SummerDayPenCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/general_use/pen.gd" +"path": "res://addons/summer_day/tools/canvas/pen.gd" }, { "base": "SummerDayTool", "class": "SummerDayRotationCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/general_use/rotation.gd" +"path": "res://addons/summer_day/tools/canvas/rotation.gd" }, { "base": "Resource", "class": "SummerDayScene", @@ -160,11 +160,6 @@ _global_script_classes=[ { "path": "res://addons/summer_day/tools/tool_system/base_tool.gd" }, { "base": "Reference", -"class": "SummerDayToolContext", -"language": "GDScript", -"path": "res://addons/summer_day/tools/tool_system/tool_context.gd" -}, { -"base": "Reference", "class": "SummerDayToolPool", "language": "GDScript", "path": "res://addons/summer_day/tools/tool_system/tool_pool.gd" @@ -182,7 +177,7 @@ _global_script_classes=[ { "base": "SummerDayTool", "class": "SummerDayZoomCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/general_use/zoom.gd" +"path": "res://addons/summer_day/tools/canvas/zoom.gd" }, { "base": "OH", "class": "VeryWorse", @@ -220,7 +215,6 @@ _global_script_class_icons={ "SummerDayTable": "", "SummerDayTimeline": "", "SummerDayTool": "", -"SummerDayToolContext": "", "SummerDayToolPool": "", "SummerDayTrack": "", "SummerDayViewportHandler": "", @@ -237,6 +231,11 @@ config/icon="res://icon.png" [autoload] Util="res://addons/summer_day/utilities/math_helper.gd" +SummerDay="*res://addons/summer_day/utilities/summer_day_globals.gd" + +[editor_plugins] + +enabled=PoolStringArray( "res://addons/summer_day/plugin.cfg" ) [gdnative]