Allow AStar/AStar2D zero point weight.
Limit was set to 1 which seemed like an arbitrary value as lower values down to zero can be useful for common gameplay navigation elements like teleports.
Adds the is_process_running function to the native OS class and exposes it to script.
This is implemented on Windows and Unix platforms. A stub is provided for other platforms that do not support this function.
Documentation is updated to reflect new API function.
(cherry picked from commit f3c1232c59)
Users happening across any of the Container pages may not already know the intent of Containers, or which others are available. This commit adds a link to the existing "GUI containers" page in their tutorials sections.
(cherry picked from commit 3b941ed98c)
This feature makes it possible to workaround problems such as:
- long baking time due to heavy synchronization when parsing geometry
from mesh instances
- crash when freeing `NavigationMeshInstance` while baking
- errors when actively baking node tree is being detached from the
scene tree
This makes it possible to create more aesthetically pleasing
styleboxes for GUI theming, especially in games that have
a futuristic appearance (where skewed buttons and progress bars
are common).
When physics interpolation is active on a node, it is essential that transforms are updated during "_physics_process()" rather than "_process()" calls, for the interpolation to give the correct result.
This PR adds optional warnings for instances, cameras and multimeshes which can flag updates being incorrectly called, and thus make these problems much easier to fix.
The docs specify that Array.remove does nothing if the index does not
exist. Array.erase does not have a similar phrase, so it's unclear if
erase will print an error, or silently do nothing.
(cherry picked from commit f84e2db35e)
This allows for lower field of view (or higher zoom) in orthogonal
and frustum camera modes.
The property hint also allows setting the size with greater precision.
This makes the following error message less likely to be printed
when performing many concurrent HTTP requests:
Condition ' resolving == IP::RESOLVER_INVALID_ID ' is true. returned: ERR_BUG
This is already done in `Node.add_child()` documentation, but
this copies the note in `Node.owner` for good measure.
(cherry picked from commit be1acf3b92)
Instead of displaying the exact string, now Godot uses the Time
singleton to calculate the date string from the UTC Unix timestamp and
also uses Time's timezone offset conversion to string function
This makes it easier to spot syntax errors when editing the
class reference. The schema is referenced locally so validation
can still work offline.
Each class XML's schema conformance is also checked on GitHub Actions.
Since some porjects may be relying on the former behavior, this is opt-in via a new project setting, disabled by default, but enabled for new projects, since it's the new standard behavior (and the only one in 4.0).
This ensures the project setting never disappears from the editor,
even if the current physics engine is GodotPhysics.
This also adds documentation for the Smooth Trimesh Collision
project setting.
This behavior is inconsistent with non tools builds and can create
issues. Instead, a warning is emitted if there's a type mismatch. If the
type can't be converted, an error is shown instead.
For the editor it gives a converted value to avoid issues with the
property editor, which expects the correct type.
This method can be used to get the CPU model name.
It can be used in conjunction with
`VisualServer.get_video_adapter_name()` and
`VisualServer.get_video_adapter_vendor()` for annotating benchmarks
and automatic graphics quality configuration.
In order to properly support the resource sharing paradigm, Occluders are split into Instances and Resources in the VisualServer. Instances are owned by a Scenario, and Resources are global. OccluderShape resources can now correctly be shared by multiple OccluderInstances.
Adds fixed timestep interpolation to the visual server.
Switchable on and off with project setting.
This version does not add new API for set_transform etc, when nodes have the interpolated flag set they will always use interpolation.
The value is already clamped in the editor, but it wasn't being
clamped when the value was set via code. Values outside the [0.0; 1.0]
range can result in broken rendering.
The documentation was stating that the area mask affects where sounds
can be heard, which is not true. Instead, the area mask affects audio
bus redirection.
Thanks to Azedaxen on the Godot forums for providing this description :)
(cherry picked from commit ab1eaac315)
Using codespell 2.2-dev from current git.
Added `misc/scripts/codespell.sh` to make it easier to run it once in a
while and update the skip and ignore lists.
(cherry picked from commit 1bdb82c64e)
-Allows more fine grained notifications (hence better performance) than using the global scene tree signals (node added and removed).
-Required for #55950
(cherry picked from commit fbd9599b04)
Add more detail to the description for the warp_mouse_position method, clarifying that the vector is in screen coordinates and relative to an origin at the top of the game window.
(cherry picked from commit 3dc1fad262)
Most frames there will be no change in project settings, and it makes no sense to read settings every frame in case of changes, as a large number of string compares are involved.
This PR adds a signal to ProjectSettings that can be subscribed to in order to keep local settings up to date with ProjectSettings.
In addition a function `ProjectSettings::has_changes()` is provided for objects outside the signal system (e.g. Rasterizers).
Allows detecting when a new version of the progressive web app service
worker is waiting (i.e. an update is pending), along a function to force
the update and reload all clients.
- Prevent debug enforced use of ubershader on shaders not supporting it
- Use unsigned integer for ubershader flags
- Add project setting for disabling async shader compilation on mobile
- Stop sampling some textures through different kinds of samplers at the same time
The portal system introduced basic mesh merging functionality, this has wide ranging uses outside of the portal system.
For this reason, this PR binds the mesh merging functionality.
It also slightly modifies the calling from RoomManager to use a Vector of Node *, in order to allow binding of the function.
- Add a range hint to the Viewport `shadow_atlas_size` property.
- Add range steps to the shadow resolution project settings that
match the lowest allowed values (since lower increments don't
make sense).
When editor continuous redraws is switched off, the editor only redraws when a redraw_request was issued by an element in the scene. This works well in most situations, but when scenes have dynamic content they will continuously issue redraw_requests.
This can be fine on high power desktops but can be an annoyance on lower power machines.
This PR splits redraw requests into high and low priority requests, defaulting to high priority. Requests due to e.g. shaders using TIME are assigned low priority.
An extra editor setting is used to record the user preference and an extra option is added to the editor spinner menu, to allow the user to select between 3 modes:
* Continuous
* Update all changes
* Update vital changes
"capture_propagation" member documentation description was missing the second 'p' in "propagation". Fixed this minor typo
Also resubmitting pull request to 3.x branch as per @Calinou's recommendation.
Both AnimatedSprite2D and AnimatedSprite3D use a SpriteFrames resource, but the SpriteFrames
class description currently only lists being used with the 2D variant.
(cherry picked from commit 4391f6a5b5)
- Fixed missing "be" typo in MeshDataTool's get_face_edge function
- Corrected documentation to say negative values aren't valid
(cherry picked from commit bc9df365b0)
specify that multiple filetypes/extensions can be included in one filter within the
PackedStringArray, and provide an example
(cherry picked from commit 123cfb4759)
The `AudioEffectRecord` effect has no microphone capture-specific functionality--it can be used with any audio bus.
This patch attempts to clarify this fact (so people like me who want to capture audio output know they're in the right place) while still providing a pointer use of the effect with `AudioStreamMicrophone` for microphone capture.
(cherry picked from commit 022f49437b)
Notably:
* `Pool*Array.size()` and `Array.size()`.
* Shared methods of `Transform2D` and `Transform`.
* Shared methods of `Vector2` and `Vector3`.
This reduces the Deja Vu when translating the class reference :)
The description was probably copied from Vector3.reflect(), and
unfortunately did not match the 2D behaviour (where n is apparently the
direction vector of the symmetry line, not the normal).
(cherry picked from commit e1bf428cdc)
Change the entire navigation system.
Remove editor prefix from nav mesh generator class. It is now used for baking
at runtime as well.
Navigation supports obstacle avoidance now with the RVO2 library.
Nav system will also automatically link all nav meshes together to form one
overall complete nav map.
Confusingly, these two properties had identical descriptions even though they measure different things.
"relative_index" measures character count from the custom effect's bbcode opening tag.
"absolute_index" measures character count from the start of the bbcode text that includes the custom effect.
See the code author's own explanation here: https://github.com/godotengine/godot/pull/23658
NOTE: Doco for CharFXTransform.xml has changed significantly in 4.0, where terminology has changed to "glyph". Therefore, proposing this change for 3.x branch only.
Swap the first lines of the descriptions for set_cell and set_cellv to correctly describe which accepts x and y as separate arguments and which accepts a Vector2.
Fix not relevant to master branch due to changes to TileMap.
A summary of the tweaked descriptions:
* "get_camera_position()" is explains what the camera position is, and mitigates the confusion between this method and Node2D.position;
* "get_camera_screen_center()" links to the "get_camera_position" method;
* "reset_smoothing()" links to the "smoothing_enabled" propriety;
* "drag_horizontal_offset" and "drag_vertical_offset" link to their respective _enabled_ properties;
* "limit_smoothed" links to the "smoothing_enabled" propriety;
* "rotating" clarifies that the camera _view_ rotates when enabled.
Partially closes https://github.com/godotengine/godot-docs/issues/5417, as some of the issues described are no longer present in 4.0, or are not fully solved in this PR.
Further tweaks are welcome, as I'm afraid this could be a too verbose. A few of these could be split into their PR if necessary.
(cherry picked from commit 6cf2623a20)
Always build with the GUI subsystem.
Redirect stdout and stderr output to the parent process console.
Use CreateProcessW for blocking `execute` calls with piped stdout and stderr (prevent console windows for popping up when used with the GUI subsystem build, and have more consistent behavior with non-blocking calls).
Add `open_console` argument to the `execute` to open a new console window (for both blocking and non-blocking calls).
Remove `interface/editor/hide_console_window` editor setting.
Remove `Toggle System Console` menu option.
Remove `set_console_visible` and `is_console_visible` functions.
* Adds proxy related methods for `HTTPClient` and `HTTPRequest`
* Adds `network/http_proxy/{host,port}` editor settings
* Makes AssetLib and Export Template Manager proxy aware
* Adds `indent(prefix)` to `String`
* Moves the loading of tool/doc translation into
`editor/editor_translation.{h,cpp}`
* Makes use of doc translation when generating XML class references, and
setup the translation locale based on `-l LOCALE` CLI parameter.
The XML class reference won't be translated if `-l LOCALE` parameter is
not given, or when it's `-l en`.
It is not uncommon to want to scroll to the most recently added child of
a ScrollContainer (e.g. a chat box or activity log). This is a little
tricky, since `ensure_control_visible` will not work on a node on the
same frame as you add it. Let's at least document that you need to wait
until the next frame.
Relates to https://github.com/godotengine/godot-proposals/issues/3629.
Backport of https://github.com/godotengine/godot/pull/55609.
Co-authored-by: Yuri Sizov <pycbouh@users.noreply.github.com>
Exposes a method in `EditorInterface` to open scripts on a specified
line and column. This method handles if the internal or the external
editor should be used.
(cherry picked from commit 9535831866)
This commit was created by merging the commits presented in #39255 for
the GSoC 2020 VCS Improvement project
VCS: Make EditorVCSInterface store less amount of internal state
VCS: Add force push checkbox + more frequent VCS updates
Add force push checkbox in the Commit dock. Also add some missing
opportunities for checking the VCS state again on from UI inputs
VCS: Fix script contents not being updated on merge conflict
VCS: Add branch creation VCS interface calls
VCS: Add VCS remote creation and remote selection menus
VCS: Show more commit information + Fix truncated commit offsets
VCS: Make VCS less noisy + Fix diff view refreshes
VCS: Fix mismatched argument names in VCS helpers
VCS: Add SSH transport support for remote operations
Also, moves the editor's VCS settings registrations to
project_settings.cpp and editor_settings.cpp
VCS: Change TTR() to vformat() for branch and remote removal text
VCS: Add VCS branch icon instead of using Tree node icon
Co-authored-by: @ChronicallySerious
The doc now states that the method searches for a World2D among ancestor Viewports as well, differentiating it from the get_world_2d() getter.
and also find_world_3d()
(cherry picked from commit 81c1d5197e)
This PR adds a define BVH_EXPAND_LEAF_AABBS which is set, which stores expanded AABBs in the tree instead of exact AABBs.
This makes the logic less error prone when considering reciprocal collisions in the pairing, as all collision detect is now taking place between expanded AABB against expanded AABB, rather than expanded AABB against exact AABB.
The flip side of this is that the intersection tests will now be less exact when expanded margins are set.
All margins are now user customizable via project settings, and take account of collision pairing density to adjust the margin dynamically.
Applying overlay materials into multi-surface meshes currently
requires adding a next pass material to all the surfaces, which
might be cumbersome when the material is to be applied to a range
of different geometries. This also makes it not trivial to use
AnimationPlayer to control the material in case of visual effects.
The material_override property is not an option as it works
replacing the active material for the surfaces, not adding a new pass.
This commit adds the material_overlay property to GeometryInstance
(and therefore MeshInstance), having the same reach as
material_override (that is, all surfaces) but adding a new material
pass on top of the active materials, instead of replacing them.
Implemented in rasterizer of both GLES2 and GLES3.
Previously a crude metric was used to decide on the roaming expansion margin, but it created unexpected results in some scenarios. Instead this setting is exposed to the user via the RoomManager, allowing them to tailor it to the world size, room sizes, roaming objects sizes and the speeds of movement.
Settings that aren't within a subsection are difficult to reach when
other settings do have a subsection.
This also adds documentation for the project setting.
Reporting rest collision information is needed for move_and_collide and
move_and_slide so floor detection can be done properly, but in the case
of just testing the motion for collision, it makes sense to return false
if the body is able to move all along the path without being stopped.
Updated the logic in test_move and clarified the documentation for
test_move and move_and_collide.
In all physics servers, body_get_direct_state() now silently returns
nullptr when the body has been already freed or is removed from space,
so the client code can detect this state and invalidate the body rid.
In 2D, there is no change in behavior (just no more errors).
In 3D, the Bullet server returned a valid direct body state when the
body was removed from the physics space, but in this case it didn't
make sense to use the information from the body state.
Async. compilation via ubershader is currently available in the scene and particles shaders only.
Bonus:
- Use `#if defined()` syntax for not true conditionals, so they don't unnecessarily take a bit in the version flagset.
- Remove unused `ENABLE_CLIP_ALPHA` from scene shader.
- Remove unused `PARTICLES_COPY` from the particles shader.
- Remove unused uniform related code.
- Shader language/compiler: use ordered hash maps for deterministic code generation (needed for caching).