Added singleton for global variables.

This commit is contained in:
mono 2022-01-02 16:42:55 +01:00
parent 83d6a31683
commit d7f1df9dc5
15 changed files with 101 additions and 117 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,7 @@
tool
extends Node
#var canvas_state: SummerDayCanvasState
var document: SummerDayDocument
var canvas_state: SummerDayCanvasState
var interaction_hint: SummerDayInteractionHint

View File

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

View File

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