Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

148 lines
4.2 KiB
GDScript

@tool
class_name PixelPenState
extends Object
signal theme_changed
signal debug_log(key, value)
signal project_file_changed
signal project_saved(is_saved)
signal palette_changed
signal color_picked(color)
signal layer_image_changed(layer_uid)
signal layer_active_changed(layer_uid)
signal layer_visibility_changed(layer_uid, visible)
signal layer_items_changed
signal thumbnail_changed
signal edit_mode_changed(mode)
signal shorcut_changed
signal request_new_project
signal request_open_project
signal request_import_image
signal request_save_project
signal request_save_as_project
signal request_layer_properties(layer_uid)
signal tool_changed(tool_grup, tool_type, grab_active)
signal toolbox_just_changed(tool_type)
signal toolbox_shift_mode(active)
signal animation_about_to_play
# Minimum project version can be handle by current app version
# [project.compatibility_version < MIN_COMPATIBILITY ] > FAIL
const MIN_COMPATIBILITY = 3
const EDITOR_TITTLE = "Pixel Pen"
# load gif exporter module
var GIFExporter = load("res://addons/net.yarvis.pixel_pen/thirdparty/gdgifexporter/exporter.gd")
# load quantization module that you want to use
var MedianCutQuantization = load("res://addons/net.yarvis.pixel_pen/thirdparty/gdgifexporter/quantization/median_cut.gd")
var current_project : PixelPenProject:
set(v):
current_project = v
if v != null and v.file_path != "":
save_cache_project_config()
var userconfig : UserConfig:
get:
if userconfig == null:
userconfig = UserConfig.load_data()
return userconfig as UserConfig
## Call this when closing PixelPen editor window
func disconnect_all_signal():
var signals : Array[String] = [
"theme_changed",
"debug_log",
"project_file_changed",
"project_saved",
"palette_changed",
"color_picked",
"layer_image_changed",
"layer_active_changed",
"layer_visibility_changed",
"layer_items_changed",
"thumbnail_changed",
"edit_mode_changed",
"shorcut_changed",
"request_new_project",
"request_open_project",
"request_import_image",
"request_save_project",
"request_save_as_project",
"request_layer_properties",
"tool_changed",
"toolbox_just_changed",
"toolbox_shift_mode",
"animation_about_to_play"]
for i in range(signals.size()):
var connection_list : Array[Dictionary] = get_signal_connection_list(signals[i])
for connection in connection_list:
connection["signal"].disconnect(connection["callable"])
func load_project(file : String)->bool:
var erase_recent = func(file_path : String):
if userconfig.recent_projects.has(file_path):
userconfig.recent_projects.erase(file_path)
userconfig.save()
if file.get_extension() == "res":
if not ResourceLoader.exists(file):
erase_recent.call(file)
return false
for dependencies in ResourceLoader.get_dependencies(file):
if not ResourceLoader.exists(dependencies):
erase_recent.call(file)
return false
var res = ProjectPacker.load_project(file)
if res == null:
erase_recent.call(file)
return false
elif res and res is PixelPenProject:
var project_compat_version = res.get("compatibility_version")
if project_compat_version == null or MIN_COMPATIBILITY > project_compat_version:
erase_recent.call(file)
return false
current_project = res
current_project.is_saved = true
userconfig.insert_recent_projects(file)
current_project.sync_gui_palette(true)
project_file_changed.emit()
return true
erase_recent.call(file)
return false
func save_cache_project_config():
var p_path = ""
if current_project != null:
p_path = current_project.file_path
userconfig.last_open_path = p_path
userconfig.save()
func load_cache_project() -> bool:
if userconfig.last_open_path != "":
return load_project(userconfig.last_open_path)
return false
## Prevent running in development mode
func need_connection(window : Window):
var need := false
if window.has_method("is_window_running"):
need = window.is_window_running()
return need or not Engine.is_editor_hint()
func get_directory():
if current_project == null or current_project.file_path == "" or current_project.file_path.get_base_dir() == "":
if userconfig.default_workspace == null or userconfig.default_workspace == "":
return OS.get_system_dir(OS.SYSTEM_DIR_DOCUMENTS)
return userconfig.default_workspace
return current_project.file_path.get_base_dir()