Skip to content

Core: Don't strip data in class_get_method_list#7

Merged
randroid88 merged 125 commits intoautomationfrom
claude/update-godot-4.6-5YAMm
Jan 27, 2026
Merged

Core: Don't strip data in class_get_method_list#7
randroid88 merged 125 commits intoautomationfrom
claude/update-godot-4.6-5YAMm

Conversation

@randroid88
Copy link

No description provided.

Repiteo and others added 30 commits January 12, 2026 10:27
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`
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"
passivestar and others added 29 commits January 24, 2026 02:30
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]>
@randroid88 randroid88 merged commit a8cacb6 into automation Jan 27, 2026
51 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.