Replace godot_db_manager plugin with native DB, port lod plugin

godot_db_manager was incompatible with Godot 4 (used WindowDialog, Tabs,
PopupPanel which were all removed). Replace with a minimal Database.gd
that parses the same ahog.json format and exposes the same surface API
(get_table_by_name, get_data_at_row_idx, edit_data, save_db, etc.) used
by the M* model classes — no changes needed in MBase/MScene/MLevel/MSetting.

Also port the lod plugin: fix class_name syntax (Godot 4 uses @icon
separately from class_name extends) and Particles -> GPUParticles3D.

Rewrite Global.gd async scene loading: the convert-3to4 tool mapped
load_interactive -> load_threaded_request but those have different APIs
(stage count, poll vs. status enum). Reimplement using the new
load_threaded_get_status / load_threaded_get pair.

Clean project.godot: drop the old _global_script_classes table (Godot 4
uses inline class_name declarations), remove gddb_* autoloads, and
remove the godot_db_manager entry from editor_plugins.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vaillant Jeremy
2026-05-16 19:21:09 +02:00
parent 01ea3af253
commit ec906117bb
73 changed files with 179 additions and 5071 deletions
+3 -211
View File
@@ -1,4 +1,3 @@
; Project was converted by built-in tool to Godot 4
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
@@ -9,196 +8,6 @@
config_version=5
_global_script_classes=[ {
"base": "Node",
"class": "GDDBConstants",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/GDDBConstants.gd"
}, {
"base": "Object",
"class": "GDDBData",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/db_data.gd"
}, {
"base": "Label",
"class": "GDDBDataLabel",
"language": "GDScript",
"path": "res://addons/godot_db_manager/data_label.gd"
}, {
"base": "PopupPanel",
"class": "GDDBDataPanel",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/data_dlg.gd"
}, {
"base": "WindowDialog",
"class": "GDDBDeletePropDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/delete_prop_dlg.gd"
}, {
"base": "WindowDialog",
"class": "GDDBDeleteTableDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/delete_table_dlg.gd"
}, {
"base": "WindowDialog",
"class": "GDDBEditStringDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/edit_string_dlg.gd"
}, {
"base": "Tabs",
"class": "GDDBEditor",
"language": "GDScript",
"path": "res://addons/godot_db_manager/db_editor.gd"
}, {
"base": "Node",
"class": "GDDBGlobals",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/GDDBGlobals.gd"
}, {
"base": "Control",
"class": "GDDBInterface",
"language": "GDScript",
"path": "res://addons/godot_db_manager/db_interface.gd"
}, {
"base": "FileDialog",
"class": "GDDBLoadResourcePathDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/load_res_path_dlg.gd"
}, {
"base": "Object",
"class": "GDDBMan",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/db_man.gd"
}, {
"base": "EditorPlugin",
"class": "GDDBManager",
"language": "GDScript",
"path": "res://addons/godot_db_manager/db_manager.gd"
}, {
"base": "Control",
"class": "GDDBMenu",
"language": "GDScript",
"path": "res://addons/godot_db_manager/menu.gd"
}, {
"base": "WindowDialog",
"class": "GDDBNewDBDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/new_db_dlg.gd"
}, {
"base": "WindowDialog",
"class": "GDDBNewTableDlg",
"language": "GDScript",
"path": "res://addons/godot_db_manager/dlgs/new_table_dlg.gd"
}, {
"base": "Object",
"class": "GDDBProperty",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/db_prop.gd"
}, {
"base": "Object",
"class": "GDDBTable",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/db_table.gd"
}, {
"base": "Control",
"class": "GDDBTableCell",
"language": "GDScript",
"path": "res://addons/godot_db_manager/table_cell.gd"
}, {
"base": "Control",
"class": "GDDBTableEditor",
"language": "GDScript",
"path": "res://addons/godot_db_manager/table_editor.gd"
}, {
"base": "Control",
"class": "GDDBTableItem",
"language": "GDScript",
"path": "res://addons/godot_db_manager/table_item.gd"
}, {
"base": "Control",
"class": "GDDBTableProperty",
"language": "GDScript",
"path": "res://addons/godot_db_manager/table_property.gd"
}, {
"base": "Control",
"class": "GDDBTablesHeader",
"language": "GDScript",
"path": "res://addons/godot_db_manager/tables_header.gd"
}, {
"base": "Control",
"class": "GDDBTablesList",
"language": "GDScript",
"path": "res://addons/godot_db_manager/tables_list.gd"
}, {
"base": "Node",
"class": "GDDBTypes",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/GDDBTypes.gd"
}, {
"base": "Object",
"class": "GDDatabase",
"language": "GDScript",
"path": "res://addons/godot_db_manager/core/database.gd"
}, {
"base": "CPUParticles",
"class": "LODCPUParticles",
"language": "GDScript",
"path": "res://addons/lod/lod_cpu_particles.gd"
}, {
"base": "OmniLight",
"class": "LODOmniLight",
"language": "GDScript",
"path": "res://addons/lod/lod_omni_light.gd"
}, {
"base": "Particles",
"class": "LODParticles",
"language": "GDScript",
"path": "res://addons/lod/lod_particles.gd"
}, {
"base": "Spatial",
"class": "LODSpatial",
"language": "GDScript",
"path": "res://addons/lod/lod_spatial.gd"
}, {
"base": "SpotLight",
"class": "LODSpotLight",
"language": "GDScript",
"path": "res://addons/lod/lod_spot_light.gd"
} ]
_global_script_class_icons={
"GDDBConstants": "",
"GDDBData": "",
"GDDBDataLabel": "",
"GDDBDataPanel": "",
"GDDBDeletePropDlg": "",
"GDDBDeleteTableDlg": "",
"GDDBEditStringDlg": "",
"GDDBEditor": "",
"GDDBGlobals": "",
"GDDBInterface": "",
"GDDBLoadResourcePathDlg": "",
"GDDBMan": "",
"GDDBManager": "",
"GDDBMenu": "",
"GDDBNewDBDlg": "",
"GDDBNewTableDlg": "",
"GDDBProperty": "",
"GDDBTable": "",
"GDDBTableCell": "",
"GDDBTableEditor": "",
"GDDBTableItem": "",
"GDDBTableProperty": "",
"GDDBTablesHeader": "",
"GDDBTablesList": "",
"GDDBTypes": "",
"GDDatabase": "",
"LODCPUParticles": "res://addons/lod/lod_cpu_particles.svg",
"LODOmniLight": "res://addons/lod/lod_omni_light.svg",
"LODParticles": "res://addons/lod/lod_particles.svg",
"LODSpatial": "res://addons/lod/lod_spatial.svg",
"LODSpotLight": "res://addons/lod/lod_spot_light.svg"
}
[application]
config/name="Puzzle Quest"
@@ -215,9 +24,6 @@ config/quit_on_go_back=false
Loading="*res://scenes/UI/loading/Loading.tscn"
Global="*res://scripts/Global.gd"
gddb_constants="*res://addons/godot_db_manager/core/GDDBConstants.gd"
gddb_types="*res://addons/godot_db_manager/core/GDDBTypes.gd"
gddb_globals="*res://addons/godot_db_manager/core/GDDBGlobals.gd"
Setting="*res://scripts/Setting.gd"
Event="*res://scripts/Event.gd"
GlobalAnimation="*res://scripts/Animation.gd"
@@ -234,7 +40,7 @@ window/stretch/aspect="expand"
[editor_plugins]
enabled=PackedStringArray( "res://addons/godot_db_manager/plugin.cfg", "res://addons/lod/plugin.cfg" )
enabled=PackedStringArray("res://addons/lod/plugin.cfg")
[importer_defaults]
@@ -252,27 +58,13 @@ scene={
ui_end={
"deadzone": 0.5,
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"command":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"command":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
]
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194318,"physical_keycode":0,"unicode":0,"echo":false,"script":null), Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"unicode":0,"echo":false,"script":null)]
}
[locale]
translations=PackedStringArray( "res://locales/fr.po", "res://locales/en.po" )
locale_filter=[ 1, [ "en_GB", "fr_FR" ] ]
[physics]
common/enable_pause_aware_picking=true
translations=PackedStringArray("res://locales/fr.po", "res://locales/en.po")
[rendering]
quality/driver/fallback_to_gles2=true
threads/thread_model=2
vram_compression/import_etc=true
shading/overrides/force_vertex_shading.mobile=false
quality/lightmapping/use_bicubic_sampling.mobile=true
quality/depth/hdr.mobile=true
environment/defaults/default_environment="res://default_env.tres"
quality/dynamic_fonts/use_oversampling=false