Figments-of-the-Night/addons/inkgd/editor/panel/ink_bottom_panel.gd
Gerard Gascón b99855351d init
2025-04-24 17:23:34 +02:00

106 lines
4.2 KiB
GDScript

@tool
# warning-ignore-all:return_value_discarded
# ############################################################################ #
# Copyright © 2019-2022 Frédéric Maquin <fred@ephread.com>
# Licensed under the MIT License.
# See LICENSE in the project root for license information.
# ############################################################################ #
extends Control
# Hiding this type to prevent registration of "private" nodes.
# See https://github.com/godotengine/godot-proposals/issues/1047
# class_name InkBottomPanel
# ############################################################################ #
# Imports
# ############################################################################ #
var InkStoryPanelScene = load("res://addons/inkgd/editor/panel/stories/ink_story_panel.tscn")
var InkPreviewPanelScene = load("res://addons/inkgd/editor/panel/preview/ink_preview_panel.tscn")
var InkConfigurationPanelScene = load("res://addons/inkgd/editor/panel/configuration/ink_configuration_panel.tscn")
# ############################################################################ #
# Properties
# ############################################################################ #
var editor_interface: InkEditorInterface = null
var configuration: InkConfiguration = null
# ############################################################################ #
# Private Properties
# ############################################################################ #
var _progress_texture: AnimatedTexture
# ############################################################################ #
# Hierarchy Nodes
# ############################################################################ #
@onready var _tab_container: TabContainer = $TabContainer
@onready var _beta_button: LinkButton = $MarginContainer/LinkButton
@onready var _story_panel = InkStoryPanelScene.instantiate()
@onready var _preview_panel = InkPreviewPanelScene.instantiate()
@onready var _configuration_panel = InkConfigurationPanelScene.instantiate()
# ############################################################################ #
# Overrides
# ############################################################################ #
func _ready():
# FIXME: This needs investigating.
# Sanity check. It seems the editor instantiates tools script on their
# own, probably to add them to its tree. In that case, they won't have
# their dependencies injected, so we're not doing anything.
if editor_interface == null || configuration == null:
print("[inkgd] [INFO] Ink Bottom Panel: dependencies not met, ignoring.")
return
_progress_texture = _create_progress_texture()
_story_panel.editor_interface = editor_interface
_story_panel.configuration = configuration
_story_panel.progress_texture = _progress_texture
_preview_panel.editor_interface = editor_interface
_preview_panel.configuration = configuration
_preview_panel.progress_texture = _progress_texture
_configuration_panel.editor_interface = editor_interface
_configuration_panel.configuration = configuration
_tab_container.add_child(_story_panel)
_tab_container.add_child(_preview_panel)
_tab_container.add_child(_configuration_panel)
_beta_button.connect("pressed", Callable(self, "_open_github_issues"))
_set_minimum_panel_size()
# ############################################################################ #
# Signals Receivers
# ############################################################################ #
func _open_github_issues():
OS.shell_open("https://github.com/ephread/inkgd/issues/new?assignees=&labels=&template=bug_report.md")
# ############################################################################ #
# Private helpers
# ############################################################################ #
func _create_progress_texture() -> AnimatedTexture:
var animated_texture = AnimatedTexture.new()
animated_texture.frames = 8
for index in range(8):
var texture = get_theme_icon(str("Progress", (index + 1)), "EditorIcons")
animated_texture.set_frame_texture(index, texture)
return animated_texture
func _set_minimum_panel_size():
# Adapting the minimum size of the panel to the scale of the editor.
custom_minimum_size = Vector2(900, 245) * editor_interface.scale