Implemented pen tool.

This commit is contained in:
mono 2021-12-19 22:26:09 +01:00
parent 34a7a8dd6d
commit 45a3f6018d
18 changed files with 122 additions and 27 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -8,4 +8,5 @@ func _init():
SummerDayHandCanvasTool.new(),
SummerDayZoomCanvasTool.new(),
SummerDayRotationCanvasTool.new(),
SummerDayPenCanvasTool.new(),
]

View File

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

View File

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

View File

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

View File

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

View File

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