Conversation
The errors were hidden by Godot by turning signal names into Callable. But actually, some of these things are signals now and not methods anymore. In Godot 3, there were signals and methods with the exact same names sometimes.
|
Made a couple more changes, notably removed the import cache folder from git tracking and updated the signal connections and the likes + corrected errors in the revealer script. |
|
One small note on something I just noticed: In the UI practice scene, there's a CodeHighlighter resource embedded. I think it's a resource we would want to share across all code editors across the application, but I couldn't find where it is in the scene to extract it as a reusable resource. |
|
I did extract a re-usable TRES, but I must have missed that one. I'll see about tracking it down. |
|
The profile was saving multiple times. Not sure why it wasn't noticeable in the godot 3 version as it happened there too. Fixed it by queueing the save so that even if save() is called multiple times, it only happens once. There's still a bit of a spike but it's a lot less egregious. Not sure if there's been a change with ResourceSaver between godot 3 and 4 that made it a bit slower. Alternatively would be to save/load with var_to_string and save one line at a time behind await process_frame, or to compile with threads support and save behind a thread. |
|
Thanks. I did a bit of testing and profiling because the lag remained long for me and saving multiple times itself should not have been too slow, although it's good that this has been cleaned up. I found that the root issue was when we change the fonts in the theme, it caused lots of notifications and re-layouts. But excessively. In the profiler, strangely enough, the time spike was reported as physics time. I managed to reduce it from 4000 ms to 500 ms by removing many references to theme resources. That's still quite long. I think this could be improved by producing fewer individual controls, notably lesson content blocks. Hopefully at least. The app could generally use a pass later on to simplify or consolidate the UI and theme etc., but maybe I will put Yuri on that when he is available (former Godot UI and theme system maintainer). I'll do a bit more testing before pushing. I'm also adding some logic so if you change settings that are not related to theme resources it doesn't touch the theme and doesn't cause any re-layout so the change is perceptually instant. |
… most UI components
…re a layout update
Converts the whole of the app from the 3.6.2 custom build with GDScriptParserWrapper to a 4.6.2 custom build with a GDScriptErrorChecker. Both are uploaded to the Razoric480/custom-godot-builder repository.
Fixes #1187. Fixes #1259.
Current State
Integration tests pass
Integration Test Log
Integration Test resultsPotential issues
Some internals to keep in mind
run()(no coroutines or stepping) or arun_coroutine(CoroutineController).yield()is replaced withawait coroutine_controller.step_requested, and run_coroutine() should end with ancoroutine_controller.finished.emit().Conversion gotchas I ran into
map_to_local()is centered, whereas TileMap'smap_to_world()was top left cornerright()function gave you the characters to the right of the index. godot 4'sright()gives you X characters from the right side (which, to be fair, matches whatleft()does).super._ready()and the like are no longer implicit and need to be called explicitly. I think I've found most of them but it's possible I've missed some.