Core: Don't strip data in class_get_method_list#7
Merged
randroid88 merged 125 commits intoautomationfrom Jan 27, 2026
Merged
Conversation
Despite what I thought in the past, it is allowed, as long as we follow certain limitations depending on the toplevel's state. As usual I peppered the code with comments expaining what those limitations are. Regarding popups, AFAICT there are no major limitations, although we should eventually use the new `reposition` method, which autoadjusts the popup to follow the screen's borders and whatnot. I didn't do that in this patch as it requires some elbow grease, especially if we want to do it synchronously.
This reverts commit bdfe854. This caused a regression for GPUParticles3D emitters on macOS arm64, which is proving to be both tricky to reproduce and solve. Other parts of the engine using RID_Owner might be affected too. Given that we're about to release 4.6, reverting might be the safest option at this time, and this optimization can be re-attempted for 4.7. Fixes godotengine#114900.
…profile_rename OpenXR: Change profile name for Valve Frame Controller
…ss-fix Limit maximum luminance for elevated surfaces in modern theme
…tint Remove checkbox icon tint in Create Scene popup
README: Minor tweaks and remove broken badge
…_fix Fix wrong play position for the `AnimationMarkerEdit`
…cons Fix editor ColorPicker icon scale
Split `EmbeddedProcess::reset` to allow stopping timers without full reset.
Remove link for consoles in EditorExportPlatform
…otation-aligned-axis-reversing Fix viewport rotation gizmo aligned axis reversing
Wayland: Allow non-interactive window resizing
Revert "Core: Switch `RID_alloc::owns` to lock-free"
Tweak IKModifier3D docs and comment
Fix colors of code editor in modern theme
Don't force list icon size in EditorFileDialog
Geometry2D: Remove `arc_tolerance` scaling and the comment related to that.
…ocheck_edition Fix not being able to remove empty theme overrides in the editor
Almost 3 years after the 4.0 release, Godot 4 is starting to be a mature engine, including a wide array of features that enable countless developers to publish games in all genres. For example, Steam got over [1,200 new Godot games](https://steamdb.info/stats/releases/?tech=Engine.Godot) in 2025, while itch.io consistently gets around [500 new Godot games per week](https://itch.io/game-development/engines/most-projects) (game jams, prototypes, etc.). While every Godot user still has their own favorite missing feature which they're eagerly awaiting, for the most part the engine is fully capable. But there are still so many minor roadblocks, papercuts, workflow issues or outright bugs which can make the experience of developing and publishing games more painful than we'd like. So for this release, there was a significant focus on polish and usability, aiming to firmly establish Godot as an engine that you can rely upon, while keeping the iteration speed, lightweightness, and flexibility which make users love it. Close to 400 contributors were involved in this new feature release, authoring 2,001 (!) commits, and we want to thank them all for their amazing contributions, as well as all users who sponsor the Development Fund, reported bugs, opened proposals, or supported each other on our community platforms. See the release page for details: https://godotengine.org/releases/4.6/
- sync-upstream.yml: nightly sync of master from upstream, then rebase automation branch onto updated master - build-automation.yml: build Godot editor and templates for Linux, Windows, and macOS with artifact upload Co-authored-by: Claude <[email protected]>
Extend RemoteDebugger with automation message capture: - automation:get_tree - get full scene tree hierarchy - automation:get_node - get node info by path - automation:get_property - get node property value - automation:set_property - set node property value - automation:call_method - call method on node Enables external tools like PlayGodot to control Godot games via the existing debugger infrastructure. Co-authored-by: Claude <[email protected]>
* Add PlayGodot integration test workflow Adds automated integration testing that runs against the Godot automation build. This workflow: - Triggers on successful automation builds or manual dispatch - Downloads the linux-editor-mono artifact - Runs PlayGodot unit tests and tic-tac-toe integration tests - Uses xvfb for headless Godot execution * Fix workflow references to match existing workflows Update playgodot-integration.yml to reference the actual workflows: - Trigger on "🔗 GHA" (runner.yml) instead of non-existent "Build Godot Automation" - Download artifacts from runner.yml instead of build-automation.yml The "🔗 GHA" workflow is the main orchestrator that triggers Linux builds, which produce the linux-editor-mono artifact needed for integration tests. --------- Co-authored-by: Claude <[email protected]>
Extends the existing automation protocol with input injection capabilities: New Commands: - automation:mouse_button - [x, y, button, pressed, double_click?] - automation:mouse_motion - [x, y, rel_x, rel_y] - automation:key - [keycode, pressed, physical?] - automation:touch - [index, x, y, pressed] - automation:action - [name, pressed, strength?] Features: - All events use DEVICE_ID_EMULATION to distinguish from real input - Mouse motion queries current button mask for proper drag support - Mouse button supports optional double_click flag - Each command responds with automation:input_result This builds on the Phase 1 automation protocol in the automation branch. Co-authored-by: Claude <[email protected]>
Phase 3 automation features: - screenshot: Capture viewport or specific node as PNG - query_nodes: Find nodes matching a pattern - count_nodes: Count nodes matching a pattern - get_current_scene: Return current scene path and name - change_scene: Switch to a different scene - reload_scene: Reload the current scene - pause/unpause: Control game pause state - time_scale: Get/set Engine.time_scale for slow-mo/speed-up
- get_current_scene now returns both scene path and name - pause/time_scale now support query mode (pass null to get current state) - pause/time_scale return actual state instead of just true
- Download Linux and macOS editor artifacts after build - Create zip files for each platform - Upload to automation-latest release - Only runs on push to automation branch
- Highlight the fork's automation capabilities and usage with PlayGodot - Add build instructions for macOS, Linux, and Windows - List new RemoteDebugger commands for automation - Provide examples of usage and related projects
The Linux build uploads artifact as 'linux-editor-mono' (matching cache-name), not 'linux-editor'. Also fixed the binary name to include .mono suffix.
Add is_inside_tree() guards to automation protocol functions in RemoteDebugger. When automation commands arrive before SceneTree::initialize() completes, these functions now return graceful empty responses instead of crashing with "Can't use get_node() with absolute paths from outside the active scene tree." Functions fixed: - _send_scene_tree() - _send_node_info() - _send_property() - _set_property() - _call_method() - _send_screenshot() - _query_nodes() - _count_nodes() This allows PlayGodot clients to use wait_for_node() which polls until the tree is ready, rather than failing immediately on startup.
- DisplayServerHeadless now stores and returns the window resolution instead of returning empty Size2i(). This ensures the viewport has the correct size for input coordinate mapping. - Added process_events() calls after input injection to ensure events are properly flushed and dispatched to the GUI system. Fixes mouse clicks not reaching Control nodes in headless mode, which was caused by gui_find_control() failing to find controls when the viewport size was incorrectly reported as 64x64 (minimum) instead of the requested resolution.
* Fix change_scene automation to wait for deferred scene load Scene changes in Godot are deferred (the actual switch happens in _flush_scene_change during idle processing). The automation protocol was sending success responses immediately, before the new scene was actually loaded and ready, causing race conditions in PlayGodot. Changes: - Add is_inside_tree() guards to _change_scene and _reload_scene - Connect to scene_changed signal with CONNECT_ONE_SHOT to send the automation:scene_result response only after the scene is fully loaded - Send immediate failure response for errors like file not found * Add missing include for callable_mp_static Include callable_method_pointer.h which is required for callable_mp_static used in the scene change signal connection. * Add AGENTS.md with guidelines for this codebase Documents common pitfalls like missing includes for callable_mp_static and automation protocol patterns to follow. * Add CLAUDE.md referencing AGENTS.md * Fix include order for style check * Add include ordering guidance to AGENTS.md * Fix callable_mp_static usage for file-scope static function Remove '&' from callable_mp_static calls - for file-scope static functions, use the function name directly without address-of operator. Class static methods use '&ClassName::method', but file-scope functions use just the function name. * Add callable_mp_static syntax guidance to AGENTS.md * Fix CONNECT_ONE_SHOT to use Object:: namespace qualifier * Update AGENTS.md: CONNECT_ONE_SHOT requires Object:: qualifier --------- Co-authored-by: Claude <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.