diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8c71697 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +# Normalize line endings for all files that Git considers text files. +* text=auto eol=lf + +# Only include the addons folder when downloading from the Asset Library. +/** export-ignore +/addons !export-ignore +/addons/** !export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d9aac21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Godot 4+ specific ignores +.godot/ + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json diff --git a/CORE/src/classes/basemodule.gd b/CORE/src/classes/basemodule.gd deleted file mode 100644 index 055dfcf..0000000 --- a/CORE/src/classes/basemodule.gd +++ /dev/null @@ -1,35 +0,0 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/classes/basemodule.gd (CORE Base Module) ### -### ### -### This source file is a basic CORE module template. It provides ### -### common functions and variables for all CORE modules. ### -############################################################################## -extends Node -class_name CoreBaseModule - -# CORE Object -var core: Core -# CORE's logger implementation -@onready var logger: Node = core.logger - -# Replacement for _init() -func _initialize() -> void: pass -# Called on configuration update -func _pull_config() -> void: pass diff --git a/CORE/src/classes/config.gd b/CORE/src/classes/config.gd deleted file mode 100644 index 51c2994..0000000 --- a/CORE/src/classes/config.gd +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/classes/config.gd (CORE Configuration) ### -### ### -### This source file contains the default configuration for the CORE ### -### Framework. ### -############################################################################## -extends Node -class_name CoreConfiguration - -@export_category("Global") -@export var headless: bool -@export var debugging: bool -@export var custom_modules: bool -@export_category("Logger") -@export var logger_level: CoreTypes.LoggerLevel -@export var logger_colored: bool -@export var logger_format: String -@export var logger_newlines_override: bool -@export var logger_newlines_sizelimit: int -@export_category("LogUI") -@export var logui_enabled: bool -@export var logui_background_color: Color -@export var logui_font_size: int - -# Default settings -func _init() -> void: - # Global - headless = false - debugging = false - custom_modules = false - - # Logger - logger_level = CoreTypes.LoggerLevel.INFO - logger_colored = true - logger_format = "%color%[%time%] [%level% %source%:%line%] %message%" - logger_newlines_override = true - logger_newlines_sizelimit = 40 - # LogUI - logui_enabled = true - logui_background_color = Color.BLACK # To disable the background, use Color.TRANSPARENT - logui_font_size = 14 diff --git a/CORE/src/classes/types.gd b/CORE/src/classes/types.gd deleted file mode 100644 index 940b242..0000000 --- a/CORE/src/classes/types.gd +++ /dev/null @@ -1,29 +0,0 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/classes/types.gd (CORE Global Types) ### -### ### -### This source file contains globally accessible custom enums and types ### -### used throughout the CORE Framework's source code. ### -############################################################################## -extends Node -class_name CoreTypes - -enum VersionType { RELEASE, RELEASECANDIDATE, BETA, ALPHA } -enum LoggerLevel { NONE, ERROR, WARN, INFO, VERB, DIAG } -enum SceneType { NONE, DEBUG, CUTSCENE, MENU, MAIN, BACKGROUND } diff --git a/CORE/src/misc.gd b/CORE/src/misc.gd deleted file mode 100644 index daab0b4..0000000 --- a/CORE/src/misc.gd +++ /dev/null @@ -1,46 +0,0 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/misc.gd (Miscellaneous) ### -### ### -### Contains various functions that don't fit into other modules. ### -############################################################################## -extends CoreBaseModule - -func quit_safely(exitcode: int = 0) -> void: - logger.info("Shutting down (code " + str(exitcode) + ")") - logger.diag("Waiting for log messages to be flushed") - await get_tree().create_timer(0.25).timeout - get_tree().quit(exitcode) - -@warning_ignore("integer_division") -func byte2mib(bytes: int, flatten: bool = true) -> float: - if flatten: return bytes/1048576 - return bytes/float(1048576) - -func mib2byte(mib: float, flatten: bool = true) -> float: - if flatten: return int(mib*1048576) - return mib*1048576 - -func mib2gib(mib: float, flatten: bool = true) -> float: - if flatten: return int(mib/1024) - return mib/1024 - -func gib2mib(gib: float, flatten: bool = true) -> float: - if flatten: return int(gib*1024) - return gib*1024 diff --git a/addons/CORE/.corebasepath b/addons/CORE/.corebasepath new file mode 100644 index 0000000..e69de29 diff --git a/CORE/LICENSE b/addons/CORE/LICENSE similarity index 100% rename from CORE/LICENSE rename to addons/CORE/LICENSE diff --git a/addons/CORE/README.md b/addons/CORE/README.md new file mode 100644 index 0000000..6ea5231 --- /dev/null +++ b/addons/CORE/README.md @@ -0,0 +1,5 @@ +# CORE Framework distribution repository +This repository is used for distributing CORE in the [Godot Asset Library](https://godotengine.org/asset-library/). + +## [CORE Repository](https://git.staropensource.de/StarOpenSource/CORE) +## [Documentation](https://core.staropensource.de) diff --git a/CORE/dist/FiraCode/Bold.ttf b/addons/CORE/dist/FiraCode/Bold.ttf similarity index 100% rename from CORE/dist/FiraCode/Bold.ttf rename to addons/CORE/dist/FiraCode/Bold.ttf diff --git a/CORE/dist/FiraCode/Bold.ttf.import b/addons/CORE/dist/FiraCode/Bold.ttf.import similarity index 100% rename from CORE/dist/FiraCode/Bold.ttf.import rename to addons/CORE/dist/FiraCode/Bold.ttf.import diff --git a/CORE/dist/FiraCode/Light.ttf b/addons/CORE/dist/FiraCode/Light.ttf similarity index 100% rename from CORE/dist/FiraCode/Light.ttf rename to addons/CORE/dist/FiraCode/Light.ttf diff --git a/CORE/dist/FiraCode/Light.ttf.import b/addons/CORE/dist/FiraCode/Light.ttf.import similarity index 100% rename from CORE/dist/FiraCode/Light.ttf.import rename to addons/CORE/dist/FiraCode/Light.ttf.import diff --git a/CORE/dist/FiraCode/Medium.ttf b/addons/CORE/dist/FiraCode/Medium.ttf similarity index 100% rename from CORE/dist/FiraCode/Medium.ttf rename to addons/CORE/dist/FiraCode/Medium.ttf diff --git a/CORE/dist/FiraCode/Medium.ttf.import b/addons/CORE/dist/FiraCode/Medium.ttf.import similarity index 100% rename from CORE/dist/FiraCode/Medium.ttf.import rename to addons/CORE/dist/FiraCode/Medium.ttf.import diff --git a/CORE/dist/FiraCode/Regular.ttf b/addons/CORE/dist/FiraCode/Regular.ttf similarity index 100% rename from CORE/dist/FiraCode/Regular.ttf rename to addons/CORE/dist/FiraCode/Regular.ttf diff --git a/CORE/dist/FiraCode/Regular.ttf.import b/addons/CORE/dist/FiraCode/Regular.ttf.import similarity index 100% rename from CORE/dist/FiraCode/Regular.ttf.import rename to addons/CORE/dist/FiraCode/Regular.ttf.import diff --git a/CORE/dist/FiraCode/Retina.ttf b/addons/CORE/dist/FiraCode/Retina.ttf similarity index 100% rename from CORE/dist/FiraCode/Retina.ttf rename to addons/CORE/dist/FiraCode/Retina.ttf diff --git a/CORE/dist/FiraCode/Retina.ttf.import b/addons/CORE/dist/FiraCode/Retina.ttf.import similarity index 100% rename from CORE/dist/FiraCode/Retina.ttf.import rename to addons/CORE/dist/FiraCode/Retina.ttf.import diff --git a/CORE/dist/core.png b/addons/CORE/dist/core.png similarity index 100% rename from CORE/dist/core.png rename to addons/CORE/dist/core.png diff --git a/CORE/dist/core.png.import b/addons/CORE/dist/core.png.import similarity index 100% rename from CORE/dist/core.png.import rename to addons/CORE/dist/core.png.import diff --git a/CORE/dist/core.xcf b/addons/CORE/dist/core.xcf similarity index 100% rename from CORE/dist/core.xcf rename to addons/CORE/dist/core.xcf diff --git a/addons/CORE/src/classes/basemodule.gd b/addons/CORE/src/classes/basemodule.gd new file mode 100644 index 0000000..71728da --- /dev/null +++ b/addons/CORE/src/classes/basemodule.gd @@ -0,0 +1,39 @@ +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Template for CORE modules. +## +## Provides a basic template and a common foundation for building CORE modules. +## It provides common functions and variables used in all CORE modules. +extends Node +class_name CoreBaseModule + +## Contains a reference to the CORE Object[br] +## [br] +## Set before loading the module into the SceneTree. +var core: Core +## Reference to CORE's logger implementation.[br] +## [br] +## Will be set before [method Node._ready] +@onready var logger: CoreBaseModule = core.logger + +## CORE's replacement for [method Object._init] and [method Node._ready] +## It's [b]strongly[/b] recommended to initialize your module here. +func _initialize() -> void: pass +## Called by [method Core.apply_configuration]. +## This should be used to update your module configuration. +func _pull_config() -> void: pass diff --git a/addons/CORE/src/classes/config.gd b/addons/CORE/src/classes/config.gd new file mode 100644 index 0000000..cd6f644 --- /dev/null +++ b/addons/CORE/src/classes/config.gd @@ -0,0 +1,79 @@ +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## The default configuration file for the CORE Framework. +## +## The [code]%CoreConfiguration[/code] class holds the Framework's settings. +## The default configuration is designed to not interfere with the developer experience +## and your project without any customization. +extends Node +class_name CoreConfiguration + +@export_category("Global") +## Controls CORE's functionality. +## Renders GUI-related modules useless when set to [code]false[/code], which is the recommended behaviour on servers. For CORE's full functionality, set this to [code]true[/code]. +@export var headless: bool +## Allows debugging functionality if set to [code]true[/code], or not if set to [code]false[/code].[br] +## [br] +## Note: This will not enable the development mode automaticall, only if you're developing on CORE itself. +@export var debugging: bool +## Allows or disallows custom modules. +@export var custom_modules: bool +@export_category("Logger") +## I don't have to explain this, do I? +@export var logger_level: CoreTypes.LoggerLevel +## Toggles colored output. Set to [code]false[/code] if you don't want that. +@export var logger_colored: bool +## The format string the logger will operate on. Available placeholders are: [code]%time%[/code], [code]%time_ms%[/code], [code]%level%[/code], [code]%color%[/code], [code]%message%[/code], [code]%source%[/code], [code]%source_raw%[/code], [code]%function%[/code] and [code]%line%[/code] +@export var logger_format: String +## This example should make it clear, what this does: +## [codeblock] +## logger_newlines_override = true: +## [09:47:00] [INFO Test.gd:69] This is a test message... +## with a newline! +## logger_newlines_override = false: +## [09:47:00] [INFO Test.gd:69] This is a test message... +## with a newline! +## [/codeblock] +@export var logger_newlines_override: bool +## The maximum amount of characters than can appear before [code]%message%[/code] before newlines won't be overriden. Setting this variable to [code]-1[/code] disables this behaviour. +@export var logger_newlines_sizelimit: int +@export_category("LogUI") +## Determines if [code]LogUI[/code] should be visible or not. +@export var logui_enabled: bool +## The color the [code]LogUI[/code] background will have. Set to [code]Color.TRANSPARENT[/code] for a transparent background. +@export var logui_background_color: Color +## What size the graphical log should have. +@export var logui_font_size: int + +# Default settings +func _init() -> void: + # Global + headless = false + debugging = false + custom_modules = false + + # Logger + logger_level = CoreTypes.LoggerLevel.INFO + logger_colored = true + logger_format = "%color%[%time%] [%level% %source%:%line%] %message%" + logger_newlines_override = true + logger_newlines_sizelimit = 40 + # LogUI + logui_enabled = true + logui_background_color = Color.BLACK # To disable the background, use Color.TRANSPARENT + logui_font_size = 14 diff --git a/addons/CORE/src/classes/types.gd b/addons/CORE/src/classes/types.gd new file mode 100644 index 0000000..dba7e77 --- /dev/null +++ b/addons/CORE/src/classes/types.gd @@ -0,0 +1,26 @@ +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Types and enums for the CORE Framework. +## +## Contains enums and types shared across the CORE Framework. +extends Node +class_name CoreTypes + +enum VersionType { RELEASE, RELEASECANDIDATE, BETA, ALPHA } +enum LoggerLevel { NONE, ERROR, WARN, INFO, VERB, DIAG } +enum SceneType { NONE, DEBUG, CUTSCENE, MENU, MAIN, BACKGROUND } diff --git a/CORE/src/core.gd b/addons/CORE/src/core.gd similarity index 62% rename from CORE/src/core.gd rename to addons/CORE/src/core.gd index c29c632..4fdc2ec 100644 --- a/CORE/src/core.gd +++ b/addons/CORE/src/core.gd @@ -1,50 +1,63 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/core.gd (CORE Object) ### -### ### -### This source file is responsible for initializing CORE's modules, ### -### handling communication between them and much more. ### -############################################################################## +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Initializes and manages the framework. +## +## The [b]CORE Object[/b] is responsible for initializing, managing and +## serving the CORE Framework to the developer. extends Node class_name Core # Constants +## The release number const version_release: int = 1 +## The release type const version_type: CoreTypes.VersionType = CoreTypes.VersionType.BETA -const version_typerelease: int = 1 +## The release type number. Resets on every new release and release type. +const version_typerelease: int = 2 # Modules +## Use this to access CORE's logging implementation. var logger: CoreBaseModule +## Use this to access various useful functions. var misc: CoreBaseModule +## Use this to access the scene management system. var sms: CoreBaseModule +## Use this to access the graphical log. Serves no importance to you (probably). var logui: CoreBaseModule +## Use this to access CORE's builtin HTTP request maker. var edl: CoreBaseModule # Variables +## Contains CORE's load path var basepath: String +## Holds the configuration[br] +## [br] +## [b]NEVER access this yourself. To change the configuration file, use [method Core.reload_configuration] instead.[/b] var config: CoreConfiguration +## Contains all loaded custom modules. var custom_modules: Dictionary = {} +## Contains the custom modules node. var custom_modules_node: Node # Preinitialization func _init(new_config: CoreConfiguration = CoreConfiguration.new()) -> void: name = "CORE" + if !check_godot_version(): queue_free() if !determine_basepath(): queue_free() custom_modules_node = Node.new() reload_configuration(new_config) @@ -59,6 +72,9 @@ func _ready() -> void: logger.info("Initialized CORE successfully") # Initialize modules +## Initializes all modules during the first initialization phase.[br] +## [br] +## [b]NEVER call this yourself! You will break everything and risk a crash![/b] func initialize_modules() -> void: # Create Nodes logger = CoreBaseModule.new() @@ -92,6 +108,9 @@ func initialize_modules() -> void: edl._initialize() # Inject modules into the SceneTree +## Injects CORE's builtin modules into the SceneTree.[br] +## [br] +## [b]NEVER call this yourself! You will break everything and risk a crash![/b] func inject_modules() -> void: add_child(logger) add_child(misc) @@ -100,6 +119,7 @@ func inject_modules() -> void: add_child(edl) # Registers a custom module +## Registers a new custom module. func register_custom_module(module_name: String, module_class: CoreBaseModule) -> bool: logger.verb("Registering new custom module \"" + module_name + "\"") if !config.custom_modules: @@ -120,6 +140,7 @@ func register_custom_module(module_name: String, module_class: CoreBaseModule) - return true # Unregisters a custom module +## Unregisters a custom module, making it no longer function. func unregister_custom_module(module_name: String) -> void: logger.verb("Unregistering custom module \"" + module_name + "\"") if !custom_modules.has(module_name): @@ -129,6 +150,7 @@ func unregister_custom_module(module_name: String) -> void: custom_modules.erase(module_name) # Returns a custom module +## Returns a loaded custom module for access. func get_custom_module(module_name: String) -> CoreBaseModule: logger.diag("Getting custom module \"" + module_name + "\"") if !custom_modules.has(module_name): @@ -137,6 +159,7 @@ func get_custom_module(module_name: String) -> CoreBaseModule: return custom_modules[module_name] # (Re-)Load configuration +## Loads a (new) configuration file and applies it to all modules. func reload_configuration(new_config: CoreConfiguration = CoreConfiguration.new()) -> void: var initialized = config != null if initialized: logger.verb("Reloading CORE's configuration") @@ -147,6 +170,9 @@ func reload_configuration(new_config: CoreConfiguration = CoreConfiguration.new( if initialized: apply_configuration() # Call _pull_config() functions +## Applies the newly applied configuration.[br] +## [br] +## [b]NEVER call this yourself unless you know what you are doing![/b] func apply_configuration() -> void: logger.verb("Applying configuration") if is_devmode(): logger.warn("The CORE Framework is in development mode. Here be dragons!") @@ -164,24 +190,20 @@ func apply_configuration() -> void: logger.diag("Updating configuration for custom module \"" + module.name + "\"") module._pull_config() -# Determines CORE's installation/base path -func determine_basepath() -> bool: - if FileAccess.file_exists("res://.corebasepath"): - basepath = "res://" - elif FileAccess.file_exists("res://CORE/.corebasepath"): - basepath = "res://CORE/" - elif FileAccess.file_exists("res://addons/CORE/.corebasepath"): - basepath = "res://addons/CORE/" - else: - assert(false, "CORE is not located at 'res://CORE/', aborting initialization") - return false - return true - # Return development mode status +## Returns if the CORE Framework is in development mode. func is_devmode() -> bool: return config.debugging and basepath == "res://" and OS.is_debug_build() # Replaces variables with human-friendly strings +## Replaces placeholders with human-friendly strings You can use the following placeholders:[br] +## - `%release%`: Returns the release number.[br] +## - `%release_type%`: Returns the typerelease number[br] +## - `%release_semantic%`: Returns the result of [method Core.get_version_semantic], example [i]5.2.3[/i][br] +## - `%type%`: Returns the release type as a word, for example [i]Release Candidate[/i][br] +## - `%type_technical%`: Returns the release type as one or two lowercase letters, for example [i]rc[/i][br] +## - `%devmode%`: Returns the development mode status[br] +## - `%headless%`: Returns the headless mode status func get_formatted_string(string: String) -> String: # Version strings string = string.replace("%release%", str(version_release)) @@ -214,6 +236,8 @@ func get_formatted_string(string: String) -> String: return string # Return CORE's version in the semantic versioning scheme +## Returns CORE's versioning scheme into the semantic versioning scheme.[br] +## The first integer contains the release number, the second integer contains the release type ([code]0[/code] for alpha, [code]1[/code] for beta, [code]2[/code] for rc and [code]3[/code] for release and the last integer contains the typerelease number. func get_version_semantic() -> Array[int]: var version_type_int: int match(version_type): @@ -222,3 +246,36 @@ func get_version_semantic() -> Array[int]: CoreTypes.VersionType.BETA: version_type_int = 1 CoreTypes.VersionType.ALPHA: version_type_int = 0 return [version_release, version_type_int, version_typerelease] + +# Determines CORE's installation/base path +## Determines CORE's installation/base path[br] +## [br] +## [b]Calling this function is likely to be safe, but shouldn't be done nonetheless![/b] +func determine_basepath() -> bool: + if FileAccess.file_exists("res://.corebasepath"): + basepath = "res://" + elif FileAccess.file_exists("res://CORE/.corebasepath"): + basepath = "res://CORE/" + elif FileAccess.file_exists("res://addons/CORE/.corebasepath"): + basepath = "res://addons/CORE/" + else: + assert(false, "CORE is not located at 'res://CORE/', aborting initialization") + return false + return true + +# Checks Godot's version +## Checks compatibility with the running version. +func check_godot_version() -> bool: + var version: Dictionary = Engine.get_version_info() + match(version["major"]): + 4: pass + _: + assert(true, "The CORE Framework does not support Godot versions older or newer than 4.x.x") + return true + match(version["minor"]): + 0: print("The CORE Framework does not support Godot versions older than 4.2.x. Please update to Godot 4.2.x to ensure full compatibility.") + 1: print("The CORE Framework does not support Godot versions older than 4.2.x. Please update to Godot 4.2.x to ensure full compatibility.") + 2: pass + _: print("The CORE Framework does not support Godot versions newer than 4.2.x. Please downgrade to Godot 4.2.x to ensure full compatibility.") + if version["status"] != "stable": print("The CORE Framework does not support unstable Godot versions. Please switch to Godot stable 4.2.1 to ensure full compatibility.") + return true diff --git a/CORE/src/edl.gd b/addons/CORE/src/edl.gd similarity index 65% rename from CORE/src/edl.gd rename to addons/CORE/src/edl.gd index 5ecfe1c..4bd72c8 100644 --- a/CORE/src/edl.gd +++ b/addons/CORE/src/edl.gd @@ -1,25 +1,23 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/edl.gd (Easy DownLoader) ### -### ### -### This source file allows for awaited and/or batched downloads. ### -############################################################################## +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## A easy download/request maker. +## +## Allows for awaited and/or batched requests. extends CoreBaseModule var list_queue: Dictionary = {} diff --git a/CORE/src/logger.gd b/addons/CORE/src/logger.gd similarity index 82% rename from CORE/src/logger.gd rename to addons/CORE/src/logger.gd index 679cb64..913963d 100644 --- a/CORE/src/logger.gd +++ b/addons/CORE/src/logger.gd @@ -1,25 +1,24 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/logger.gd (Logger implementation) ### -### ### -### Prints formatted strings into the console/log. ### -############################################################################## +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Your usual basic logger implementation, with some extra features. +## +## Allows for colored output, better newlines, multiple logger levels and a +## large variety of placeholders usable in [param config_format]. extends CoreBaseModule # Signals diff --git a/CORE/src/logui.gd b/addons/CORE/src/logui.gd similarity index 59% rename from CORE/src/logui.gd rename to addons/CORE/src/logui.gd index 07d2d26..136e516 100644 --- a/CORE/src/logui.gd +++ b/addons/CORE/src/logui.gd @@ -1,25 +1,23 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/logui.gd (LogUI) ### -### ### -### Displays the log/console output graphically. ### -############################################################################## +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Displays the log graphically. +## +## Displays the log output graphically in the background of the application. extends CoreBaseModule # Objects diff --git a/addons/CORE/src/misc.gd b/addons/CORE/src/misc.gd new file mode 100644 index 0000000..43f5ad4 --- /dev/null +++ b/addons/CORE/src/misc.gd @@ -0,0 +1,45 @@ +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Contains various useful functions that do not fit into other modules. +## +## Contains various useful functions that you can use to save yourself some time +## programming or searching. +extends CoreBaseModule + +func quit_safely(exitcode: int = 0) -> void: + logger.info("Shutting down (code " + str(exitcode) + ")") + logger.diag("Waiting for log messages to be flushed") + await get_tree().create_timer(0.25).timeout + get_tree().quit(exitcode) + +@warning_ignore("integer_division") +func byte2mib(bytes: int, flatten: bool = true) -> float: + if flatten: return bytes/1048576 + return bytes/float(1048576) + +func mib2byte(mib: float, flatten: bool = true) -> float: + if flatten: return int(mib*1048576) + return mib*1048576 + +func mib2gib(mib: float, flatten: bool = true) -> float: + if flatten: return int(mib/1024) + return mib/1024 + +func gib2mib(gib: float, flatten: bool = true) -> float: + if flatten: return int(gib*1024) + return gib*1024 diff --git a/CORE/src/sms.gd b/addons/CORE/src/sms.gd similarity index 72% rename from CORE/src/sms.gd rename to addons/CORE/src/sms.gd index 08c6280..1504e20 100644 --- a/CORE/src/sms.gd +++ b/addons/CORE/src/sms.gd @@ -1,25 +1,23 @@ -############################################################################## -### CORE FRAMEWORK SOURCE FILE ### -### Copyright (c) 2024 The StarOpenSource Project & Contributors ### -### Licensed under the GNU General Public License v3 ### -### ### -### This program is free software: you can redistribute it and/or modify ### -### it under the terms of the GNU General Public License as published by ### -### the Free Software Foundation, either version 3 of the License, or ### -### (at your option) any later version. ### -### ### -### This program is distributed in the hope that it will be useful, ### -### but WITHOUT ANY WARRANTY; without even the implied warranty of ### -### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### -### GNU General Public License for more details. ### -### ### -### You should have received a copy of the GNU General Public License ### -### along with this program. If not, see . ### -############################################################################## -### src/sms.gd (Scene Management System) ### -### ### -### Makes scene management way smarter and easier. ### -############################################################################## +# CORE FRAMEWORK SOURCE FILE +# Copyright (c) 2024 The StarOpenSource Project & Contributors +# Licensed under the GNU General Public License v3 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +## Manages scenes more efficiently. +## +## Allows for organized scene management, making development much faster. extends CoreBaseModule # Objects