MultiplayerPeerExtension isn't an exact replacement for
NetworkedMultiplayerCustom, but at least it gets you moving in the right direction.
Engine.editor_hint couldn't be fixed by the renames map, because you have to add a `()` at the end.
(cherry picked from commit 6b17c2b6e7)
In godot3, `tool` can follow keywords like `extends` and `class_name`
In godot4, `@tool` must be the first line in the file.
(cherry picked from commit 9a474fb99f)
Fixes#70542.
The 3to4 conversion tool was not handling superclass constructors.
We should translate the godot3 syntax:
```gdscript
func _init(a,b,c).(a,b,c):
pass
func _init(a,b,c):
super(a,b,c)
```
Originally, the _init conversion was intended to remove `void` return types from _init functions, as this was disallowed due to #50589.
As that was resolved by #53366, I removed that part of the conversion logic. If a void return type is present on a constructor, the converter now leaves it.
Here's a sample diff from my own project:
```diff
@@ -103,10 +105,11 @@ class Real:
class Text:
extends Setting
- var choices: PoolStringArray
- var value: String setget set_value, get_value
+ var choices: PackedStringArray
+ var value: String : get = get_value, set = set_value
- func _init(section: String, key: String, default: String, choice_list: Array).(section, key, default) -> void:
+ func _init(section: String, key: String, default: String, choice_list: Array) -> void:
+ super(section, key, default)
choices = choice_list
func normalize(val):
@@ -129,9 +132,10 @@ class Text:
class Boolean:
extends Setting
- var value: bool setget set_value, get_value
+ var value: bool : get = get_value, set = set_value
- func _init(section: String, key: String, default: bool).(section, key, default) -> void:
+ func _init(section: String, key: String, default: bool) -> void:
+ super(section, key, default)
pass
```
(cherry picked from commit 53a00abb11)
Fixes#74204.
The style guide says
> Always use one space around operators and after commas
The 3to4 conversion tool currently strips space in certain scenarios.
I've updated it to add space whenever it is generating new code.
In any case where it substitutes existing code, it leaves it as-is.
For example, connect(a,b,c) becomes `connect(a, callable(b, c))`, because the converter is adding new commads/parens.
However, `xform(Vector3(a,b,c))` becomes `Transform * Vector3(a,b,c)` because it uses the user's original Vector3 string whole. If the user originally had `xform(Vector3(a, b, c))`, then it becomes `Transform * Vector3(a, b, c)`.
Ideally we'd always preserve original formatting, but this seems quite difficult, so I tried to preserve it where we can, but air on the side of following the style guide whenever we're transforming code.
(cherry picked from commit d3684e662f)
Prevents ending up with an empty C# menu.
The option to create the C# solution no longer disappears, to avoid confusing users.
If an user tries to use it when a C# solution already exists they are warned that it will override their sln and csproj files.
(cherry picked from commit a1a2fc2255)
The current documentation uses the term "running" for two different things.
In the description of get_id() it claims "it will return empty string if the thread is not running", but it actually will return the thread id until wait_to_finish is called.
In the description of is_alive() it claims "it will return true if the thread is running", but in this case it means "the provided function hasn't finished running yet".
Updated the functions documentation slighly to make this clear.
(cherry picked from commit 2a4f38d54f)
Moved definitions of editor related project settings to `editor/register_editor_types.cpp` to make documentation work.
(cherry picked from commit 3de5332fcb)
When selecting "Show in FileSystem" from the context menu of a resource
in the inspector, the engine would crash if the FileSystem dock was
floating because it was trying to focus the FileSystem tab, but floating
docks don't use Tab Containers. This commit makes the FileSystem dock's
window grab focus instead if it's floating.
(cherry picked from commit c4d1513e15)
4 years of development.
12,000 merged pull requests.
7,000 fixed issues.
1,500 individual contributors across engine and docs.
The Godot 4.0 release is by all metrics our biggest release so far.
No stone has been left unturned, all parts of the engine have been
modernized, refactored, overhauled, rewritten, redesigned.
Our work is far from done. Many areas still have significant known issues,
and will require focused work from all willing contributors to fix blocking
bugs, implement missing features, optimize for performance or compatibility,
and improve the user experience.
But Godot 4.0 marks the start of the new, modern Godot Engine, and a solid
foundation for us all to build upon. Future 4.x releases will come with a
much faster cadence, enabling us to iterate quickly on new features and
improvements to what we already provide.
To all of you who were involved in making Godot 4.0 what it is today, however
big or small your contributions were:
THANK YOU!
This was a massive undertaking, and you all participated in unique and
wonderful ways to build a free and open source game engine for everyone to
use and enjoy. You are breathtaking! <3
We couldn't hope to complete an in-depth curated changelog for such
a massive release, so we simply link to our in-depth release notes :)
Also adds back the 3.3, 3.4, and 3.5 curated changelogs. Those were
released from the 3.x branch so theoretically do not share a common
history with 4.0 (which started development after 3.2), but in practice
users will still perceive 4.0 as the natural upgrade to 3.5.