2023-03-18 16:34:12 +01:00
# core.gd
# CORE Holder
#
# This file is part of StarOpenSource CORE (SOSCORE)
# Made by the StarOpenSource Project and Contributers
# Licensed under GNU GPLv3
extends Node
2023-08-07 14:49:12 +02:00
const version = " source 0 "
var protection_mode = false
2023-03-18 16:34:12 +01:00
var locked = false
2023-05-29 20:46:47 +02:00
var readycount = 0
2023-06-29 17:22:13 +02:00
var readylized = false # Fun Fact: "ready" is a signal from "Node" and I (JeremyStarTM) just added "lized" from "initialized" to it to avoid a error thrown by Godot
2023-03-18 16:34:12 +01:00
var config = null
var wmgr = null
var smgr = null
2023-05-29 20:46:47 +02:00
var resmgr = null
var events = null
2023-06-29 17:22:13 +02:00
var splash = null
2023-08-07 14:49:12 +02:00
var moam = null
var mkdown = null
enum Errors { UNKNOWN }
enum Responsibilities { UNKNOWN }
2023-03-18 16:34:12 +01:00
2023-08-07 14:49:12 +02:00
func attach ( type : String , module , do_setup : bool = true ) - > void :
if protection_mode : return
2023-03-18 16:34:12 +01:00
if locked :
return
Logger . diag ( " core " , " Attaching " + type + " to CORE " )
2023-08-07 14:49:12 +02:00
var mod = module
2023-06-29 17:22:13 +02:00
if do_setup :
2023-08-07 14:49:12 +02:00
mod = Control . new ( )
mod . name = type
mod . set_script ( module )
2023-03-18 16:34:12 +01:00
match ( type ) :
2023-08-07 14:49:12 +02:00
" config " : config = mod
" wmgr " : wmgr = mod
" smgr " : smgr = mod
" resmgr " : resmgr = mod
" events " : events = mod
" splash " : splash = mod
" moam " : moam = mod
" mkdown " : mkdown = mod
2023-03-18 16:34:12 +01:00
_ :
2023-08-07 14:49:12 +02:00
exception ( " core " , " Attaching \" " + type + " \" failed as it is not a valid module " )
mod . free ( )
2023-03-18 16:34:12 +01:00
return
2023-08-07 14:49:12 +02:00
add_child ( mod )
2023-03-18 16:34:12 +01:00
Logger . diag ( " core " , " Attached " + type + " successfully " )
2023-05-29 20:46:47 +02:00
func setready ( ) - > void :
2023-08-07 14:49:12 +02:00
if protection_mode : return
2023-05-29 20:46:47 +02:00
readycount = readycount + 1
2023-08-07 14:49:12 +02:00
if readycount == 7 :
2023-05-29 20:46:47 +02:00
readylized = true
2023-03-18 16:34:12 +01:00
func lock ( ) - > void :
2023-08-07 14:49:12 +02:00
if protection_mode : return
2023-03-18 16:34:12 +01:00
locked = true
2023-06-29 17:22:13 +02:00
Logger . diag ( " core " , " CORE is now locked. No new attachments can be added. " )
2023-03-18 18:02:07 +01:00
func welcome ( ) - > void :
2023-08-07 14:49:12 +02:00
if protection_mode : return
Logger . info ( " core " , " CORE ( " + version + " ) welcomes you!<nl>It seems like everything is working :) " )
func exception ( script : String , error : String ) :
protection_mode = true
var exc_message = """
[ color = red ] ################################
EXCEPTION ! EXCEPTION ! EXCEPTION !
The CORE Framework experienced a critical error in runtime .
Please report this crash to the CORE Framework repository ( with
the full log file ) . You can submit a crash report at :
https : / / git . staropensource . de / StarOpenSource / core / issues / new
CORE INFORMATION
version = " % version % "
readylized = % readylized %
readycount = % readycount %
locked = % locked %
preprocessor_enabled = % preprocessor_enabled %
preprocessor_tests = % preprocessor_tests %
preprocessor_tests_executed = % preprocessor_tests_executed %
preprocessor_tests_success = % preprocessor_tests_success %
logger_enabled = % logger_enabled %
logger_diag = % logger_diag %
OPERATING SYSTEM
timezone = % timezone %
time_utc = " % time_utc % "
time_unix = % time_unix %
date = " %d ate % "
locale = " %lo cale % "
lang = " % lang % "
name = " % name % "
distro = " %d istro % "
version = " % version_os % "
memory = % memory %
memory_peak = % memory_peak %
memory_usage = % memory_usage %
processor_count = % processor_count %
processor_name = " % processor_name % "
video_adapter = % video_adapter %
rendering_api = " %r endering_api % "
APPLICATION
cmdline = % cmdline %
permissions = % permissions %
debug_build = % debug_build %
ERROR INFORMATION
script = " %s cript % "
error = " %e rror % "
STACKTRACE
% stacktrace %
EXCEPTION ! EXCEPTION ! EXCEPTION !
################################
"""
exc_message = exc_message . replace ( " % version % " , version )
exc_message = exc_message . replace ( " %r eadylized % " , str ( readylized ) )
exc_message = exc_message . replace ( " %r eadycount % " , str ( readycount ) )
exc_message = exc_message . replace ( " %lo cked % " , str ( locked ) )
exc_message = exc_message . replace ( " % preprocessor_enabled % " , str ( Preprocessor . enabled ) )
exc_message = exc_message . replace ( " % preprocessor_tests % " , str ( Preprocessor . tests_enabled ) )
exc_message = exc_message . replace ( " % preprocessor_tests_executed % " , str ( Preprocessor . tests_executed ) )
exc_message = exc_message . replace ( " % preprocessor_tests_success % " , str ( Preprocessor . tests_success ) )
exc_message = exc_message . replace ( " %lo gger_enabled % " , str ( Logger . enable ) )
exc_message = exc_message . replace ( " %lo gger_diag % " , str ( Logger . enable_diag ) )
exc_message = exc_message . replace ( " % timezone % " , str ( Time . get_time_zone_from_system ( ) ) )
exc_message = exc_message . replace ( " % time_utc % " , Time . get_time_string_from_system ( true ) )
exc_message = exc_message . replace ( " % time_unix % " , str ( Time . get_unix_time_from_datetime_string ( Time . get_time_string_from_system ( true ) ) ) )
exc_message = exc_message . replace ( " %d ate % " , Time . get_date_string_from_system ( true ) )
exc_message = exc_message . replace ( " %lo cale % " , OS . get_locale ( ) )
exc_message = exc_message . replace ( " % lang % " , OS . get_locale_language ( ) )
exc_message = exc_message . replace ( " % name % " , OS . get_name ( ) )
exc_message = exc_message . replace ( " %d istro % " , OS . get_distribution_name ( ) )
exc_message = exc_message . replace ( " % version_os % " , OS . get_version ( ) )
exc_message = exc_message . replace ( " % memory % " , str ( OS . get_memory_info ( ) ) )
exc_message = exc_message . replace ( " % memory_peak % " , str ( OS . get_static_memory_peak_usage ( ) ) )
exc_message = exc_message . replace ( " % memory_usage % " , str ( OS . get_static_memory_usage ( ) ) )
exc_message = exc_message . replace ( " % processor_count % " , str ( OS . get_processor_count ( ) ) )
exc_message = exc_message . replace ( " % processor_name % " , OS . get_processor_name ( ) )
exc_message = exc_message . replace ( " % video_adapter % " , str ( OS . get_video_adapter_driver_info ( ) ) )
exc_message = exc_message . replace ( " %r endering_api % " , RenderingServer . get_video_adapter_api_version ( ) )
exc_message = exc_message . replace ( " %c mdline % " , str ( OS . get_cmdline_args ( ) ) )
exc_message = exc_message . replace ( " % permissions % " , str ( OS . get_granted_permissions ( ) ) )
exc_message = exc_message . replace ( " %d ebug_build % " , str ( OS . is_debug_build ( ) ) )
exc_message = exc_message . replace ( " %s cript % " , script )
exc_message = exc_message . replace ( " %e rror % " , error )
exc_message = exc_message . replace ( " %s tacktrace % " , str ( get_stack ( ) ) )
print_rich ( exc_message )
await get_tree ( ) . create_timer ( 0.25 ) . timeout
get_tree ( ) . quit ( 255 )
func error ( module : String , respo : Responsibilities , error : Errors , error_info : Dictionary = { } ) - > Dictionary :
var error_text = " "
match ( respo ) :
Responsibilities [ " UNKNOWN " ] :
pass
match ( error ) :
Errors [ " UNKNOWN " ] :
error_text = " "
_ :
exception ( " core " , " Failed generating error: Invalid error \" " + str ( error ) + " \" " )
return { }