Implemented pen tool.
This commit is contained in:
parent
34a7a8dd6d
commit
45a3f6018d
|
@ -5,9 +5,16 @@ extends Resource
|
||||||
class_name SummerDayBlueprint
|
class_name SummerDayBlueprint
|
||||||
|
|
||||||
|
|
||||||
func create_model() -> PackedScene: # Virtual.
|
var active = true # Not handled right now.
|
||||||
|
|
||||||
|
|
||||||
|
func _create_model() -> PackedScene: # Virtual.
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
func create_cell() -> SummerDayCell: # Virtual.
|
func _create_cell() -> SummerDayCell: # Virtual.
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event): # Virtual.
|
||||||
|
pass
|
||||||
|
|
|
@ -5,15 +5,14 @@ class_name SummerDayEditable
|
||||||
|
|
||||||
var priority = 0
|
var priority = 0
|
||||||
var modifier_layer = 0
|
var modifier_layer = 0
|
||||||
|
var selected = false
|
||||||
|
|
||||||
|
|
||||||
func _check_for_use(
|
func _check_for_selection(event: InputEvent): # Virtual.
|
||||||
event: InputEvent, tool_context: SummerDayToolContext
|
pass
|
||||||
) -> bool: # Virtual.
|
|
||||||
return false
|
|
||||||
|
|
||||||
|
|
||||||
func _run(event: InputEvent, tool_context: SummerDayToolContext): # Virtual.
|
func _interact(event: InputEvent): # Virtual.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,5 +20,6 @@ func _update_table(table: Image): # Virtual.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
func get_priority_score() -> int:
|
func _is_point_included(point: Vector2) -> bool: # Virtual.
|
||||||
return priority * 4 + modifier_layer
|
return false
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
tool
|
tool
|
||||||
extends SummerDayEditable
|
extends SummerDayEditable
|
||||||
class_name SummerDayEditableTube
|
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
|
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
|
export(Array, Resource) var tracks
|
||||||
|
|
||||||
|
|
||||||
func add_blueprint(blueprint: SummerDayBlueprint):
|
func add_track(blueprint: SummerDayBlueprint):
|
||||||
var track = SummerDayTrack.new()
|
var track = SummerDayTrack.new()
|
||||||
track.blueprint = blueprint
|
track.blueprint = blueprint
|
||||||
track.add_drawing()
|
track.add_cell(0)
|
||||||
tracks.append(track)
|
tracks.append(track)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,29 @@ class_name SummerDayTrack
|
||||||
|
|
||||||
|
|
||||||
export(Resource) var blueprint
|
export(Resource) var blueprint
|
||||||
export(Array, Resource) var drawings
|
export(Array, Resource) var cells
|
||||||
|
|
||||||
|
|
||||||
func add_drawing():
|
func add_cell(at: int):
|
||||||
var new_drawing = blueprint.duplicate(true)
|
var new_cell = blueprint._create_cell()
|
||||||
drawings.append(new_drawing)
|
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",
|
self.connect("sd_scene_changed",
|
||||||
Canvas, "_on_SummerDay_scene_changed"
|
Canvas, "_on_SummerDay_scene_changed"
|
||||||
)
|
)
|
||||||
|
self.connect("document_changed",
|
||||||
|
tool_context, "_on_SummerDay_document_changed"
|
||||||
|
)
|
||||||
self.connect("sd_scene_changed",
|
self.connect("sd_scene_changed",
|
||||||
tool_context, "_on_SummerDay_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(),
|
SummerDayHandCanvasTool.new(),
|
||||||
SummerDayZoomCanvasTool.new(),
|
SummerDayZoomCanvasTool.new(),
|
||||||
SummerDayRotationCanvasTool.new(),
|
SummerDayRotationCanvasTool.new(),
|
||||||
|
SummerDayPenCanvasTool.new(),
|
||||||
]
|
]
|
|
@ -2,10 +2,17 @@ extends Reference
|
||||||
class_name SummerDayToolContext
|
class_name SummerDayToolContext
|
||||||
|
|
||||||
|
|
||||||
|
var edited_document: SummerDayDocument
|
||||||
var edited_scene: SummerDayScene
|
var edited_scene: SummerDayScene
|
||||||
var canvas_state: SummerDayCanvasState
|
var canvas_state: SummerDayCanvasState
|
||||||
var position: Vector2
|
var position: Vector2
|
||||||
|
|
||||||
|
|
||||||
|
func _on_SummerDay_document_changed(new_document):
|
||||||
|
edited_document = new_document
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
func _on_SummerDay_scene_changed(new_scene):
|
func _on_SummerDay_scene_changed(new_scene):
|
||||||
edited_scene = new_scene
|
edited_scene = new_scene
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ func drop_data(position, data):
|
||||||
var file_path = data["files"][0]
|
var file_path = data["files"][0]
|
||||||
var instance = load(file_path)
|
var instance = load(file_path)
|
||||||
if instance is SummerDayBlueprint:
|
if instance is SummerDayBlueprint:
|
||||||
document.add_blueprint(instance)
|
document.add_track(instance)
|
||||||
|
|
||||||
|
|
||||||
func _on_SummerDay_document_changed(new_doc):
|
func _on_SummerDay_document_changed(new_doc):
|
||||||
|
|
|
@ -12,6 +12,7 @@ var rect_size: Vector2
|
||||||
var fill_transform := Transform2D.IDENTITY
|
var fill_transform := Transform2D.IDENTITY
|
||||||
var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform
|
var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform
|
||||||
var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform
|
var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform
|
||||||
|
var inverse_view_transform := Transform2D.IDENTITY
|
||||||
|
|
||||||
# For spacial transform.
|
# For spacial transform.
|
||||||
var clip_space_view_transform := Transform2D.IDENTITY
|
var clip_space_view_transform := Transform2D.IDENTITY
|
||||||
|
@ -65,6 +66,7 @@ func update_canvas_to_clip_space():
|
||||||
|
|
||||||
func _update_view_transformation(transform):
|
func _update_view_transformation(transform):
|
||||||
view_transform = canvas_transform * fill_transform
|
view_transform = canvas_transform * fill_transform
|
||||||
|
inverse_view_transform = view_transform.affine_inverse()
|
||||||
clip_space_view_transform = canvas_to_clip_space * view_transform
|
clip_space_view_transform = canvas_to_clip_space * view_transform
|
||||||
|
|
||||||
emit_signal(
|
emit_signal(
|
||||||
|
|
|
@ -12,10 +12,7 @@ var table: Image
|
||||||
var model: PackedScene = null
|
var model: PackedScene = null
|
||||||
|
|
||||||
|
|
||||||
func _setup_editables():
|
func _create_model():
|
||||||
pass
|
|
||||||
|
|
||||||
func provide_model():
|
|
||||||
if model == null:
|
if model == null:
|
||||||
var caps = CapsuleMesh.new()
|
var caps = CapsuleMesh.new()
|
||||||
var arr_mesh := ArrayMesh.new()
|
var arr_mesh := ArrayMesh.new()
|
||||||
|
@ -40,7 +37,13 @@ func provide_model():
|
||||||
model = PackedScene.new()
|
model = PackedScene.new()
|
||||||
var result = model.pack(m)
|
var result = model.pack(m)
|
||||||
return model
|
return model
|
||||||
"
|
|
||||||
|
|
||||||
|
func _create_cell():
|
||||||
|
var cell = SummerDayCell.new()
|
||||||
|
var cylinder = SummerDayEditableTube.new()
|
||||||
|
cell.editable_list.append(cylinder)
|
||||||
|
return cell"
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = SubResource( 1 )
|
script = SubResource( 1 )
|
||||||
|
|
|
@ -57,7 +57,7 @@ _global_script_classes=[ {
|
||||||
"base": "SummerDayToolPool",
|
"base": "SummerDayToolPool",
|
||||||
"class": "SummerDayCanvasToolPool",
|
"class": "SummerDayCanvasToolPool",
|
||||||
"language": "GDScript",
|
"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",
|
"base": "Resource",
|
||||||
"class": "SummerDayCell",
|
"class": "SummerDayCell",
|
||||||
|
@ -87,12 +87,12 @@ _global_script_classes=[ {
|
||||||
"base": "SummerDayTool",
|
"base": "SummerDayTool",
|
||||||
"class": "SummerDayFreeTransformCanvasTool",
|
"class": "SummerDayFreeTransformCanvasTool",
|
||||||
"language": "GDScript",
|
"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",
|
"base": "SummerDayTool",
|
||||||
"class": "SummerDayHandCanvasTool",
|
"class": "SummerDayHandCanvasTool",
|
||||||
"language": "GDScript",
|
"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",
|
"base": "Control",
|
||||||
"class": "SummerDayMainScreen",
|
"class": "SummerDayMainScreen",
|
||||||
|
@ -105,9 +105,14 @@ _global_script_classes=[ {
|
||||||
"path": "res://addons/summer_day/utilities/math_helper.gd"
|
"path": "res://addons/summer_day/utilities/math_helper.gd"
|
||||||
}, {
|
}, {
|
||||||
"base": "SummerDayTool",
|
"base": "SummerDayTool",
|
||||||
|
"class": "SummerDayPenCanvasTool",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://addons/summer_day/tools/canvas/general_use/pen.gd"
|
||||||
|
}, {
|
||||||
|
"base": "SummerDayTool",
|
||||||
"class": "SummerDayRotationCanvasTool",
|
"class": "SummerDayRotationCanvasTool",
|
||||||
"language": "GDScript",
|
"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",
|
"base": "Resource",
|
||||||
"class": "SummerDayScene",
|
"class": "SummerDayScene",
|
||||||
|
@ -157,7 +162,7 @@ _global_script_classes=[ {
|
||||||
"base": "SummerDayTool",
|
"base": "SummerDayTool",
|
||||||
"class": "SummerDayZoomCanvasTool",
|
"class": "SummerDayZoomCanvasTool",
|
||||||
"language": "GDScript",
|
"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",
|
"base": "OH",
|
||||||
"class": "VeryWorse",
|
"class": "VeryWorse",
|
||||||
|
@ -184,6 +189,7 @@ _global_script_class_icons={
|
||||||
"SummerDayHandCanvasTool": "",
|
"SummerDayHandCanvasTool": "",
|
||||||
"SummerDayMainScreen": "",
|
"SummerDayMainScreen": "",
|
||||||
"SummerDayMathHelper": "",
|
"SummerDayMathHelper": "",
|
||||||
|
"SummerDayPenCanvasTool": "",
|
||||||
"SummerDayRotationCanvasTool": "",
|
"SummerDayRotationCanvasTool": "",
|
||||||
"SummerDayScene": "",
|
"SummerDayScene": "",
|
||||||
"SummerDaySceneFrame": "",
|
"SummerDaySceneFrame": "",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user