Added singleton for global variables.
This commit is contained in:
parent
83d6a31683
commit
d7f1df9dc5
|
@ -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")
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
]
|
||||
)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
tool
|
||||
extends Node
|
||||
|
||||
|
||||
#var canvas_state: SummerDayCanvasState
|
||||
var document: SummerDayDocument
|
||||
var canvas_state: SummerDayCanvasState
|
||||
var interaction_hint: SummerDayInteractionHint
|
||||
|
|
|
@ -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 )
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user