99 lines
3.3 KiB
GDScript
99 lines
3.3 KiB
GDScript
class_name PankuModuleNativeLogger extends PankuModule
|
|
|
|
var output_overlay:RichTextLabel
|
|
var native_logs_monitor:Node
|
|
var window:PankuLynxWindow
|
|
var logger_ui:Node
|
|
var output_overlay_display_mode:ScreenOverlayDisplayMode
|
|
var show_timestamp:bool
|
|
|
|
enum ScreenOverlayDisplayMode {
|
|
AlwaysShow,
|
|
ShowIfShellVisible,
|
|
NeverShow
|
|
}
|
|
|
|
func init_module():
|
|
# add godot log monitor
|
|
native_logs_monitor = preload("./godot_log_monitor.gd").new()
|
|
core.add_child(native_logs_monitor)
|
|
|
|
# add output overlay
|
|
output_overlay = preload("./log_overlay.tscn").instantiate()
|
|
output_overlay.clear()
|
|
core.add_child(output_overlay)
|
|
|
|
# add logger window
|
|
logger_ui = preload("./logger_view.tscn").instantiate()
|
|
logger_ui._module = self
|
|
logger_ui.console = core
|
|
|
|
window = core.windows_manager.create_window(logger_ui)
|
|
add_auto_save_hook(window)
|
|
window.queue_free_on_close = false
|
|
window.set_window_title_text("Native Logger")
|
|
|
|
native_logs_monitor.error_msg_received.connect(
|
|
func(msg:String):
|
|
logger_ui.add_log(msg, 3)
|
|
)
|
|
native_logs_monitor.warning_msg_received.connect(
|
|
func(msg:String):
|
|
logger_ui.add_log(msg, 2)
|
|
)
|
|
native_logs_monitor.info_msg_received.connect(
|
|
func(msg:String):
|
|
logger_ui.add_log(msg, 1)
|
|
)
|
|
logger_ui.content_updated.connect(
|
|
func(bbcode:String):
|
|
output_overlay.text = bbcode
|
|
)
|
|
|
|
core.interactive_shell_visibility_changed.connect(
|
|
func(v:bool):
|
|
if output_overlay_display_mode == ScreenOverlayDisplayMode.ShowIfShellVisible:
|
|
output_overlay.visible = v
|
|
)
|
|
|
|
# load data
|
|
load_window_data(window)
|
|
get_module_opt().screen_overlay = load_module_data("screen_overlay", ScreenOverlayDisplayMode.AlwaysShow)
|
|
get_module_opt().screen_overlay_alpha = load_module_data("screen_overlay_alpha", 0.3)
|
|
get_module_opt().screen_overlay_font_shadow = load_module_data("screen_overlay_font_shadow", false)
|
|
get_module_opt().screen_overlay_override_font_size = load_module_data("screen_overlay_override_font_size", 0)
|
|
get_module_opt().show_timestamp = load_module_data("show_timestamp", true)
|
|
logger_ui.load_data(load_module_data("logger_tags", ["[error]", "[warning]"]))
|
|
|
|
func quit_module():
|
|
super.quit_module()
|
|
# properties defined in opt.gd will be automatically saved as soon as the value is changed
|
|
# we only need to manually save properties outside opt.gd
|
|
save_window_data(window)
|
|
save_module_data("logger_tags", logger_ui.get_data())
|
|
|
|
func open_window():
|
|
window.show_window()
|
|
|
|
func toggle_overlay():
|
|
var next = {
|
|
ScreenOverlayDisplayMode.AlwaysShow: ScreenOverlayDisplayMode.NeverShow,
|
|
ScreenOverlayDisplayMode.ShowIfShellVisible: ScreenOverlayDisplayMode.NeverShow,
|
|
ScreenOverlayDisplayMode.NeverShow: ScreenOverlayDisplayMode.AlwaysShow
|
|
}
|
|
output_overlay_display_mode = next[output_overlay_display_mode]
|
|
set_overlay_display_mode(output_overlay_display_mode)
|
|
|
|
func set_overlay_display_mode(mode:ScreenOverlayDisplayMode):
|
|
output_overlay_display_mode = mode
|
|
if output_overlay_display_mode == ScreenOverlayDisplayMode.AlwaysShow:
|
|
output_overlay.visible = true
|
|
elif output_overlay_display_mode == ScreenOverlayDisplayMode.ShowIfShellVisible:
|
|
output_overlay.visible = core.get_shell_visibility()
|
|
elif output_overlay_display_mode == ScreenOverlayDisplayMode.NeverShow:
|
|
output_overlay.visible = false
|
|
|
|
func set_show_timestamp(v:bool):
|
|
show_timestamp = v
|
|
logger_ui.update_view()
|