diff --git a/addons/summer_day/data/blueprint/blueprint.gd b/addons/summer_day/data/blueprint/blueprint.gd index c11fbfd..f7c3809 100644 --- a/addons/summer_day/data/blueprint/blueprint.gd +++ b/addons/summer_day/data/blueprint/blueprint.gd @@ -5,9 +5,16 @@ extends Resource class_name SummerDayBlueprint -func create_model() -> PackedScene: # Virtual. +var active = true # Not handled right now. + + +func _create_model() -> PackedScene: # Virtual. return null -func create_cell() -> SummerDayCell: # Virtual. +func _create_cell() -> SummerDayCell: # Virtual. return null + + +func _input(event): # Virtual. + pass diff --git a/addons/summer_day/data/blueprint/editable.gd b/addons/summer_day/data/blueprint/editable.gd index a41f6b7..ece4d2c 100644 --- a/addons/summer_day/data/blueprint/editable.gd +++ b/addons/summer_day/data/blueprint/editable.gd @@ -5,15 +5,14 @@ class_name SummerDayEditable var priority = 0 var modifier_layer = 0 +var selected = false -func _check_for_use( - event: InputEvent, tool_context: SummerDayToolContext - ) -> bool: # Virtual. - return false +func _check_for_selection(event: InputEvent): # Virtual. + pass -func _run(event: InputEvent, tool_context: SummerDayToolContext): # Virtual. +func _interact(event: InputEvent): # Virtual. pass @@ -21,5 +20,6 @@ func _update_table(table: Image): # Virtual. pass -func get_priority_score() -> int: - return priority * 4 + modifier_layer +func _is_point_included(point: Vector2) -> bool: # Virtual. + return false + diff --git a/addons/summer_day/data/blueprint/template_editables/tube.gd b/addons/summer_day/data/blueprint/template_editables/tube.gd index b415507..91bf456 100644 --- a/addons/summer_day/data/blueprint/template_editables/tube.gd +++ b/addons/summer_day/data/blueprint/template_editables/tube.gd @@ -1,3 +1,20 @@ tool extends SummerDayEditable class_name SummerDayEditableTube + + +func _check_for_selection(event: InputEvent): # Virtual. + print(event.position) + + +func _interact(event: InputEvent): # Virtual. + pass + + +func _update_table(table: Image): # Virtual. + pass + + +func _is_point_included(point: Vector2) -> bool: # Virtual. + return false + diff --git a/addons/summer_day/data/document/cell.gd b/addons/summer_day/data/document/cell.gd index 2204ae5..6bc7856 100644 --- a/addons/summer_day/data/document/cell.gd +++ b/addons/summer_day/data/document/cell.gd @@ -3,4 +3,9 @@ extends Resource class_name SummerDayCell -var editable_list = [] +export(Array, Resource) var editable_list := [] + + +func _pass_input(event: InputEvent): # Virtual. + for i in editable_list: + i._check_for_selection(event) diff --git a/addons/summer_day/data/document/document.gd b/addons/summer_day/data/document/document.gd index b4816c3..98f58a6 100644 --- a/addons/summer_day/data/document/document.gd +++ b/addons/summer_day/data/document/document.gd @@ -7,10 +7,10 @@ export(Resource) var scene = _scene_generation() export(Array, Resource) var tracks -func add_blueprint(blueprint: SummerDayBlueprint): +func add_track(blueprint: SummerDayBlueprint): var track = SummerDayTrack.new() track.blueprint = blueprint - track.add_drawing() + track.add_cell(0) tracks.append(track) diff --git a/addons/summer_day/data/document/track.gd b/addons/summer_day/data/document/track.gd index b2d300e..efaa973 100644 --- a/addons/summer_day/data/document/track.gd +++ b/addons/summer_day/data/document/track.gd @@ -4,9 +4,29 @@ class_name SummerDayTrack export(Resource) var blueprint -export(Array, Resource) var drawings +export(Array, Resource) var cells -func add_drawing(): - var new_drawing = blueprint.duplicate(true) - drawings.append(new_drawing) +func add_cell(at: int): + var new_cell = blueprint._create_cell() + cells.append(new_cell) + + +func get_current_cell(): + if cells: + return cells[0] # This is just a placeholder. + # TODO: make this return the currently shown cell. + else: + return null + + +func pass_global_input(event): + var current_cell = get_current_cell() + if current_cell: + current_cell._handle_global_input(event) + + +func pass_local_input(event: InputEvent): + var current_cell = get_current_cell() + if current_cell: + current_cell._pass_input(event) diff --git a/addons/summer_day/summer_day.gd b/addons/summer_day/summer_day.gd index 39d9c06..cc05ed1 100644 --- a/addons/summer_day/summer_day.gd +++ b/addons/summer_day/summer_day.gd @@ -27,6 +27,9 @@ func _enter_tree(): self.connect("sd_scene_changed", Canvas, "_on_SummerDay_scene_changed" ) + self.connect("document_changed", + tool_context, "_on_SummerDay_document_changed" + ) self.connect("sd_scene_changed", tool_context, "_on_SummerDay_scene_changed" ) diff --git a/addons/summer_day/tools/canvas/tools/general_use/free_transform.gd b/addons/summer_day/tools/canvas/general_use/free_transform.gd similarity index 100% rename from addons/summer_day/tools/canvas/tools/general_use/free_transform.gd rename to addons/summer_day/tools/canvas/general_use/free_transform.gd diff --git a/addons/summer_day/tools/canvas/tools/general_use/hand.gd b/addons/summer_day/tools/canvas/general_use/hand.gd similarity index 100% rename from addons/summer_day/tools/canvas/tools/general_use/hand.gd rename to addons/summer_day/tools/canvas/general_use/hand.gd diff --git a/addons/summer_day/tools/canvas/general_use/pen.gd b/addons/summer_day/tools/canvas/general_use/pen.gd new file mode 100644 index 0000000..4b076e3 --- /dev/null +++ b/addons/summer_day/tools/canvas/general_use/pen.gd @@ -0,0 +1,24 @@ +extends SummerDayTool +class_name SummerDayPenCanvasTool + + +func _init(): + priority = 1 + + +func _check_for_use(event: InputEvent, tool_context: SummerDayToolContext): + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT and event.is_pressed(): + return true + + if event is InputEventMouseMotion: + return true + + +func _run(event: InputEvent, tool_context: SummerDayToolContext): + if tool_context.edited_document: + var transformed_event = event.xformed_by( + tool_context.canvas_state.inverse_view_transform + ) + for track in tool_context.edited_document.tracks: + track.pass_local_input(transformed_event) diff --git a/addons/summer_day/tools/canvas/tools/general_use/rotation.gd b/addons/summer_day/tools/canvas/general_use/rotation.gd similarity index 100% rename from addons/summer_day/tools/canvas/tools/general_use/rotation.gd rename to addons/summer_day/tools/canvas/general_use/rotation.gd diff --git a/addons/summer_day/tools/canvas/tools/general_use/zoom.gd b/addons/summer_day/tools/canvas/general_use/zoom.gd similarity index 100% rename from addons/summer_day/tools/canvas/tools/general_use/zoom.gd rename to addons/summer_day/tools/canvas/general_use/zoom.gd diff --git a/addons/summer_day/tools/canvas/tools/tool_pool.gd b/addons/summer_day/tools/canvas/tool_pool.gd similarity index 88% rename from addons/summer_day/tools/canvas/tools/tool_pool.gd rename to addons/summer_day/tools/canvas/tool_pool.gd index 5677cf3..d6b76b7 100644 --- a/addons/summer_day/tools/canvas/tools/tool_pool.gd +++ b/addons/summer_day/tools/canvas/tool_pool.gd @@ -8,4 +8,5 @@ func _init(): SummerDayHandCanvasTool.new(), SummerDayZoomCanvasTool.new(), SummerDayRotationCanvasTool.new(), + SummerDayPenCanvasTool.new(), ] diff --git a/addons/summer_day/tools/tool_system/tool_context.gd b/addons/summer_day/tools/tool_system/tool_context.gd index fb40c7a..2d679e0 100644 --- a/addons/summer_day/tools/tool_system/tool_context.gd +++ b/addons/summer_day/tools/tool_system/tool_context.gd @@ -2,10 +2,17 @@ extends Reference class_name SummerDayToolContext +var edited_document: SummerDayDocument var edited_scene: SummerDayScene var canvas_state: SummerDayCanvasState var position: Vector2 +func _on_SummerDay_document_changed(new_document): + edited_document = new_document + pass + + func _on_SummerDay_scene_changed(new_scene): edited_scene = new_scene + diff --git a/addons/summer_day/user_interface/canvas/canvas.gd b/addons/summer_day/user_interface/canvas/canvas.gd index 5570319..13f98a6 100644 --- a/addons/summer_day/user_interface/canvas/canvas.gd +++ b/addons/summer_day/user_interface/canvas/canvas.gd @@ -41,7 +41,7 @@ func drop_data(position, data): var file_path = data["files"][0] var instance = load(file_path) if instance is SummerDayBlueprint: - document.add_blueprint(instance) + document.add_track(instance) func _on_SummerDay_document_changed(new_doc): diff --git a/addons/summer_day/user_interface/canvas/canvas_state.gd b/addons/summer_day/user_interface/canvas/canvas_state.gd index a833e3f..c82721f 100644 --- a/addons/summer_day/user_interface/canvas/canvas_state.gd +++ b/addons/summer_day/user_interface/canvas/canvas_state.gd @@ -12,6 +12,7 @@ var rect_size: Vector2 var fill_transform := Transform2D.IDENTITY var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform +var inverse_view_transform := Transform2D.IDENTITY # For spacial transform. var clip_space_view_transform := Transform2D.IDENTITY @@ -65,6 +66,7 @@ func update_canvas_to_clip_space(): func _update_view_transformation(transform): view_transform = canvas_transform * fill_transform + inverse_view_transform = view_transform.affine_inverse() clip_space_view_transform = canvas_to_clip_space * view_transform emit_signal( diff --git a/production/blueprints/mannequin/mannequin.tres b/production/blueprints/mannequin/mannequin.tres index ca55e82..d99460b 100644 --- a/production/blueprints/mannequin/mannequin.tres +++ b/production/blueprints/mannequin/mannequin.tres @@ -12,10 +12,7 @@ var table: Image var model: PackedScene = null -func _setup_editables(): - pass - -func provide_model(): +func _create_model(): if model == null: var caps = CapsuleMesh.new() var arr_mesh := ArrayMesh.new() @@ -40,7 +37,13 @@ func provide_model(): model = PackedScene.new() var result = model.pack(m) return model -" + + +func _create_cell(): + var cell = SummerDayCell.new() + var cylinder = SummerDayEditableTube.new() + cell.editable_list.append(cylinder) + return cell" [resource] script = SubResource( 1 ) diff --git a/project.godot b/project.godot index 380c3b8..028de54 100644 --- a/project.godot +++ b/project.godot @@ -57,7 +57,7 @@ _global_script_classes=[ { "base": "SummerDayToolPool", "class": "SummerDayCanvasToolPool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/tools/tool_pool.gd" +"path": "res://addons/summer_day/tools/canvas/tool_pool.gd" }, { "base": "Resource", "class": "SummerDayCell", @@ -87,12 +87,12 @@ _global_script_classes=[ { "base": "SummerDayTool", "class": "SummerDayFreeTransformCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/tools/general_use/free_transform.gd" +"path": "res://addons/summer_day/tools/canvas/general_use/free_transform.gd" }, { "base": "SummerDayTool", "class": "SummerDayHandCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/tools/general_use/hand.gd" +"path": "res://addons/summer_day/tools/canvas/general_use/hand.gd" }, { "base": "Control", "class": "SummerDayMainScreen", @@ -105,9 +105,14 @@ _global_script_classes=[ { "path": "res://addons/summer_day/utilities/math_helper.gd" }, { "base": "SummerDayTool", +"class": "SummerDayPenCanvasTool", +"language": "GDScript", +"path": "res://addons/summer_day/tools/canvas/general_use/pen.gd" +}, { +"base": "SummerDayTool", "class": "SummerDayRotationCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/tools/general_use/rotation.gd" +"path": "res://addons/summer_day/tools/canvas/general_use/rotation.gd" }, { "base": "Resource", "class": "SummerDayScene", @@ -157,7 +162,7 @@ _global_script_classes=[ { "base": "SummerDayTool", "class": "SummerDayZoomCanvasTool", "language": "GDScript", -"path": "res://addons/summer_day/tools/canvas/tools/general_use/zoom.gd" +"path": "res://addons/summer_day/tools/canvas/general_use/zoom.gd" }, { "base": "OH", "class": "VeryWorse", @@ -184,6 +189,7 @@ _global_script_class_icons={ "SummerDayHandCanvasTool": "", "SummerDayMainScreen": "", "SummerDayMathHelper": "", +"SummerDayPenCanvasTool": "", "SummerDayRotationCanvasTool": "", "SummerDayScene": "", "SummerDaySceneFrame": "",