Implemented pen tool.
This commit is contained in:
parent
34a7a8dd6d
commit
45a3f6018d
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
)
|
||||
|
|
|
@ -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)
|
|
@ -8,4 +8,5 @@ func _init():
|
|||
SummerDayHandCanvasTool.new(),
|
||||
SummerDayZoomCanvasTool.new(),
|
||||
SummerDayRotationCanvasTool.new(),
|
||||
SummerDayPenCanvasTool.new(),
|
||||
]
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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": "",
|
||||
|
|
Loading…
Reference in New Issue
Block a user