summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.md3
-rw-r--r--DONORS.md70
-rw-r--r--doc/classes/AnimationNodeBlendTree.xml3
-rw-r--r--doc/classes/CanvasItem.xml9
-rw-r--r--doc/classes/Object.xml3
-rw-r--r--editor/editor_about.cpp4
-rw-r--r--editor/editor_export.cpp39
-rw-r--r--editor/editor_export.h17
-rw-r--r--editor/editor_node.cpp5
-rw-r--r--editor/editor_settings.cpp14
-rw-r--r--editor/export_template_manager.cpp4
-rw-r--r--editor/plugins/skeleton_3d_editor_plugin.cpp8
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp17
-rw-r--r--modules/gdscript/gdscript_parser.cpp11
-rw-r--r--platform/linuxbsd/export/export.cpp108
-rw-r--r--platform/linuxbsd/export/export_plugin.cpp126
-rw-r--r--platform/linuxbsd/export/export_plugin.h4
-rw-r--r--platform/windows/export/export.cpp75
-rw-r--r--platform/windows/export/export_plugin.cpp77
-rw-r--r--platform/windows/export/export_plugin.h2
-rw-r--r--scene/gui/progress_bar.cpp2
-rw-r--r--scene/main/canvas_item.cpp1
22 files changed, 308 insertions, 294 deletions
diff --git a/AUTHORS.md b/AUTHORS.md
index 07a67de77b..4d52e3d1e0 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -197,6 +197,7 @@ name is available.
Ray Koopa (RayKoopa)
Rémi Verschelde (akien-mga)
Rhody Lugo (rraallvv)
+ Ricardo Buring (rburing)
Ricardo Subtil (Ev1lbl0w)
Roberto F. Arroyo (robfram)
Robin Hübner (profan)
@@ -232,7 +233,7 @@ name is available.
Wilson E. Alvarez (Rubonnek)
Xavier Cho (mysticfall)
yg2f (SuperUserNameMan)
- Yuri Roubinsky (Chaosus)
+ Yuri Rubinsky (Chaosus)
Yuri Sizov (pycbouh)
Zae Chao (zaevi)
Zak Stam (zaksnet)
diff --git a/DONORS.md b/DONORS.md
index 815ad49958..36fa7a39ad 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -22,7 +22,6 @@ generous deed immortalized in the next stable release of Godot Engine.
## Silver sponsors
ASIFA-Hollywood <https://www.asifa-hollywood.org>
- LITSLINK <https://litslink.com>
ORE System <https://ore-system.com>
## Bronze sponsors
@@ -36,8 +35,9 @@ generous deed immortalized in the next stable release of Godot Engine.
Hunter Dickson
Kitcat490
Kyle Szklenski
+ Maxim Karsten
Moonwards <https://www.moonwards.com>
- TrampolineTales <http://trampolinetales.com>
+ TrampolineTales <https://trampolinetales.com>
## Mini sponsors
@@ -49,7 +49,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Christian Baune
Christopher Montesano
Christopher Shifflett
- CodeLikeCammy
Daniel Edwards
Darrin Massena
David Mydlarz
@@ -69,8 +68,8 @@ generous deed immortalized in the next stable release of Godot Engine.
Kossi Selom Banybah
Marcel Kräml
Marek Belski
+ Markus Ort
Matthieu Huvé
- Maxim Karsten
Michael
Mike King
Nassor Paulino da Silva
@@ -124,14 +123,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Mathieu
Matthew Hillier
Officine Pixel S.n.c.
- Patrick Brock
Pedro Silva
Retro Village
Rob Messick
Roland Fredenhagen
Ronan Zeegers
Sarksus
- Scott B
Sean
Sergey
Sofox
@@ -145,6 +142,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Victor
Xeno Coliseum
+ Adam Mill
Adam Nakonieczny
Adam Nelson
Adrian Adamiak
@@ -160,14 +158,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Antoni Batchelli
Arch Henderson III
Arthur S. Muszynski
- Brandon Hawkinson
+ c64cosmin
Cameron Connolly
- Carl Kryschi
Charlie Whitfield
Chase Taranto
Chris Petrich
Chris Serino
- Cow
Craig Ostrin
Craig Scarborough
Craig Smith
@@ -180,6 +176,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Daniel Hernández Alcojor
Daniel Tebbutt
Darrian Little
+ Daylon
Dennis Belfrage
Dev To be curious
Dima Fedotov
@@ -187,6 +184,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Dmitriy Khudorozhkov
Donn Eddy
Douglas Hammond
+ EerieExpanse
Eric Brand
Eugenio Hugo Salgüero Jáñez
EXUREI
@@ -198,7 +196,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Gabrielius Vaiškūnas
Gary Hulst
gavlig
- General Chicken
Geoffroy Warin
GGGames.org
gisora
@@ -207,7 +204,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Harry Tumber
Harvey Fong
Heath Hayes
- Horváth Péter
+ Horváth-Lázár Péter
Hu Hund
Hunter Barabas
HurrieCrane
@@ -219,6 +216,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jean-Sébastien Ross
Jennifer Wilcox
Jeremi Biernacki
+ Jesús Chicharro
Joel Fivat
Johnathan Kupferer
Josef Stumpfegger
@@ -243,6 +241,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Leo Fidel R Liban
Liam Smyth
LoparPanda
+ LordZaruflex
Luca Vazzano
Luke
MadScientistCarl
@@ -256,17 +255,17 @@ generous deed immortalized in the next stable release of Godot Engine.
matt
Matt Greene
Matthew Hall
+ Max Kryschi
medecau
Michael Dürwald
Michael Policastro
- Michael Seawell
+ Miika Moilanen
MikadoSC
Mike Barbee
nate etan
Nick Abousselam
Nicola Cocchiaro
Nicolás Carrasco
- Nicole Barovic
Oliver Dick
Oscar Campos
Paul Hocker
@@ -291,6 +290,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Romeo Disca
Ronnie Ashlock
Ronny Mühle
+ Russ
Ryan Breaker
Ryan Heath
Ryan Scott
@@ -314,7 +314,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Sven F.
Thomas Bjarnelöf
Thomas Kurz
- Tim Howard
Timothy van der Valk
Tobias Bocanegra
Tobias Raggl
@@ -326,7 +325,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Turntsnaco
Valryia
Vincent Cloutier
- Vlad Ceru Opran
VoidPointer
Winston
Wojciech Chojnacki
@@ -353,6 +351,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Aidan O'Flannagain
Aki Mimoto
Alan Beauchamp
+ Albert Gyulgazyan
Alberto Salazar Muñoz
Alberto Vilches
Alder Stefano
@@ -360,7 +359,6 @@ generous deed immortalized in the next stable release of Godot Engine.
AleMax
Ales Jelovcan
Alessandro Senese
- Alexander Ravenheart
Alex Chan
Alex Clavelle
alex raeside
@@ -389,10 +387,9 @@ generous deed immortalized in the next stable release of Godot Engine.
AzulCrescent
b110110
Balázs Batári
- Bálint Horváth
Beau Seymour
+ Behzad Ghaffari
Benedikt
- Benoit Jauvin-Girard
Ben Ridley
Ben Vercammen
Bernd Jänichen
@@ -411,9 +408,9 @@ generous deed immortalized in the next stable release of Godot Engine.
Brodie Fairhall
Bronson Zgeb
Burney Waring
- c64cosmin
Caleb Gartner
Caleb Makela
+ Caliburn
Cameron Meyer
Carlos Rios
Carl van der Geest
@@ -421,7 +418,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Cassidy James
Chad Steadman
Checkpoint Charlie
- Chris Chapin
+ ChrBohm
Chris Jagusch
Chris Langford
Christian Mauduit
@@ -430,15 +427,14 @@ generous deed immortalized in the next stable release of Godot Engine.
Christophe Gagnier
Christopher Chin
Christoph Woinke
+ Codecat
Cody Parker
- CoffeeFingers
Conall O
Conner Lane
Corchari
- Craig Maloney
+ Corey W
Craig Post
Dakota Watkins
- damucz
Daniel Cheney
Daren Scot Wilson
Dave Walker
@@ -450,18 +446,17 @@ generous deed immortalized in the next stable release of Godot Engine.
Devin Carraway
Diego Pereira
Dimitri Roche
- Dmitry Fisher (Raccoon path)
Dmytro Korchynskyi
Dominik Wetzel
Don B
Douglas Plumley
Dragontrapper
Dr Ewan Murray
+ Ducky
Duobix
Duodecimal
Eduardo Teixeira
Edward Herbert
- Edward L
Edward Swartz
Egon Elbre
Elgenzay
@@ -496,18 +491,17 @@ generous deed immortalized in the next stable release of Godot Engine.
Greg Olson
Greyson Richey
Grid
- Grok Games
Grominet
Guillaume Pham Ngoc
Guldoman
+ Guo Hongci
gurehamu
Hal A
Haplo
Hayden Foley
Heribert Hirth
Hinken
- Houdini Blueprints
- Ian ORourke
+ Ian Richard Kunert
Ian Williams
Idilio Alfaro
IndustrialRobot
@@ -543,6 +537,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Joe Hurdle
Joe Klemmer
Joel Höglund
+ John Anders Stav
John Bruce
John Gabriel
Jonas
@@ -566,6 +561,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Josh P
Josh Taylor
Joshua Heidrich
+ Joshua Segall
jromkjrom
Juanfran
Juan Maggi
@@ -575,10 +571,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Julian Murgia
June Little
Justin Hamilton
- Justin Hurst
Justin Oaksford
Justin Spedding
KaDokta
+ Karol Wojtasiuk (Drakonter)
Katsuomi Kobayashi
Keedong Park
keeganstoybox
@@ -607,11 +603,11 @@ generous deed immortalized in the next stable release of Godot Engine.
Laurent CHEA
Laurent Dethoor
Laxman Pradhan
+ Leland Vakarian
LEMMiNO
Leonardo Dimano
Linus Lind Lundgren
Logan Apple
- Luca Poli
Ludovic DELVAL
Luigi Renna
Luis Gaemperle
@@ -624,14 +620,13 @@ generous deed immortalized in the next stable release of Godot Engine.
Mark Malone
Markus Martin
Markus Michael Egger
- Markus Ort
Markus Strompen
Martin FIbik
Martin Holas
+ Martin Linklater
Martin Liška
Martin Trbola
Martin Zabinski
- Mathieu Meissonnier
Matt Edwards
Matthew Booe
Matt Sylvia
@@ -652,7 +647,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Michał Skwarek
Mikael Nordenberg
Mikayla
- Mike
Mike Birkhead
Mike Copley
Mitchell
@@ -662,7 +656,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Molinghu
Molly Jameson
MoltenGears
- Moowool
moulefrite
MrAZIE
Mrjemandem
@@ -683,16 +676,16 @@ generous deed immortalized in the next stable release of Godot Engine.
Nils Nordmark
Nima Farid
Noel Billig
+ Noesis
oceoh
Okatima
Oleg Reva
Oliver Ambrose
- Oriol Muñoz Princep
oscar1000108
Oscar Domingo
- p
Pascal
Patrick Indermühle
+ Patrickm
Patrick Nafarrete
Patrick Wuttke
Paul E Hansen
@@ -719,7 +712,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Rammeow
RAMupgrade
red1939
- Relintai
Remi Rampin
Reneator
René Habermann
@@ -728,6 +720,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Richard Ivánek
Richard Néveri
Riley
+ Robin Ward
RobotCritter
Rob Ruana
Rodrigo Loli
@@ -739,6 +732,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Ronan
Roy Scayged
Ryan Groom
+ Rykk
Sam Caulfield
Sam Edson
Sammy Fischer
@@ -766,10 +760,10 @@ generous deed immortalized in the next stable release of Godot Engine.
slavfox
smbe19
smo1704
+ Snippytorque
Soheib El-Harrache
Solene Waked
Sophie Winter
- Spencer Everhart
Squirrel
Stéphane Roussel
Stephen Rice
diff --git a/doc/classes/AnimationNodeBlendTree.xml b/doc/classes/AnimationNodeBlendTree.xml
index 20eb349363..fcdd09f144 100644
--- a/doc/classes/AnimationNodeBlendTree.xml
+++ b/doc/classes/AnimationNodeBlendTree.xml
@@ -4,7 +4,8 @@
[AnimationTree] node resource that contains many blend type nodes.
</brief_description>
<description>
- This node may contain a sub-tree of any other blend type nodes, such as mix, blend2, blend3, one shot, etc. This is one of the most commonly used roots.
+ This node may contain a sub-tree of any other blend type nodes, such as [AnimationNodeTransition], [AnimationNodeBlend2], [AnimationNodeBlend3], [AnimationNodeOneShot], etc. This is one of the most commonly used roots.
+ An [AnimationNodeOutput] node named [code]output[/code] is created by default.
</description>
<tutorials>
<link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index 060d685ece..1fe2f5a756 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -439,14 +439,14 @@
<return type="void" />
<argument index="0" name="enable" type="bool" />
<description>
- If [code]enable[/code] is [code]true[/code], children will be updated with local transform data.
+ If [code]enable[/code] is [code]true[/code], this node will receive [constant NOTIFICATION_LOCAL_TRANSFORM_CHANGED] when its local transform changes.
</description>
</method>
<method name="set_notify_transform">
<return type="void" />
<argument index="0" name="enable" type="bool" />
<description>
- If [code]enable[/code] is [code]true[/code], children will be updated with global transform data.
+ If [code]enable[/code] is [code]true[/code], this node will receive [constant NOTIFICATION_TRANSFORM_CHANGED] when its global transform changes.
</description>
</method>
<method name="show">
@@ -524,7 +524,10 @@
</signals>
<constants>
<constant name="NOTIFICATION_TRANSFORM_CHANGED" value="2000">
- The [CanvasItem]'s transform has changed. This notification is only received if enabled by [method set_notify_transform] or [method set_notify_local_transform].
+ The [CanvasItem]'s global transform has changed. This notification is only received if enabled by [method set_notify_transform].
+ </constant>
+ <constant name="NOTIFICATION_LOCAL_TRANSFORM_CHANGED" value="35">
+ The [CanvasItem]'s local transform has changed. This notification is only received if enabled by [method set_notify_local_transform].
</constant>
<constant name="NOTIFICATION_DRAW" value="30">
The [CanvasItem] is requested to draw.
diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml
index a57101b62d..d09f3a2b0d 100644
--- a/doc/classes/Object.xml
+++ b/doc/classes/Object.xml
@@ -53,7 +53,8 @@
<method name="_init" qualifiers="virtual">
<return type="void" />
<description>
- Called when the object is initialized.
+ Called when the object is initialized in memory. Can be defined to take in parameters, that are passed in when constructing.
+ [b]Note:[/b] If [method _init] is defined with required parameters, then explicit construction is the only valid means of creating an Object of the class. If any other means (such as [method PackedScene.instantiate]) is used, then initialization will fail.
</description>
</method>
<method name="_notification" qualifiers="virtual">
diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp
index 9b6e2698b6..5beda7d907 100644
--- a/editor/editor_about.cpp
+++ b/editor/editor_about.cpp
@@ -43,10 +43,10 @@ void EditorAbout::_theme_changed() {
const int font_size = get_theme_font_size(SNAME("source_size"), SNAME("EditorFonts"));
_tpl_text->add_theme_font_override("normal_font", font);
_tpl_text->add_theme_font_size_override("normal_font_size", font_size);
- _tpl_text->add_theme_constant_override("line_separation", 6 * EDSCALE);
+ _tpl_text->add_theme_constant_override("line_separation", 4 * EDSCALE);
_license_text->add_theme_font_override("normal_font", font);
_license_text->add_theme_font_size_override("normal_font_size", font_size);
- _license_text->add_theme_constant_override("line_separation", 6 * EDSCALE);
+ _license_text->add_theme_constant_override("line_separation", 4 * EDSCALE);
_logo->set_texture(get_theme_icon(SNAME("Logo"), SNAME("EditorIcons")));
}
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 3c2c7232f8..afb5bd9d4d 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -1819,23 +1819,6 @@ bool EditorExportPlatformPC::can_export(const Ref<EditorExportPreset> &p_preset,
return valid;
}
-List<String> EditorExportPlatformPC::get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const {
- List<String> list;
- for (const KeyValue<String, String> &E : extensions) {
- if (p_preset->get(E.key)) {
- list.push_back(extensions[E.key]);
- return list;
- }
- }
-
- if (extensions.has("default")) {
- list.push_back(extensions["default"]);
- return list;
- }
-
- return list;
-}
-
Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags) {
ExportNotifier notifier(*this, p_preset, p_debug, p_path, p_flags);
@@ -1890,10 +1873,7 @@ Error EditorExportPlatformPC::export_project(const Ref<EditorExportPreset> &p_pr
return ERR_INVALID_PARAMETER;
}
- FixUpEmbeddedPckFunc fixup_func = get_fixup_embedded_pck_func();
- if (fixup_func) {
- err = fixup_func(p_path, embedded_pos, embedded_size);
- }
+ err = fixup_embedded_pck(p_path, embedded_pos, embedded_size);
}
if (err == OK && !so_files.is_empty()) {
@@ -1930,10 +1910,6 @@ Error EditorExportPlatformPC::sign_shared_object(const Ref<EditorExportPreset> &
return OK;
}
-void EditorExportPlatformPC::set_extension(const String &p_extension, const String &p_feature_key) {
- extensions[p_feature_key] = p_extension;
-}
-
void EditorExportPlatformPC::set_name(const String &p_name) {
name = p_name;
}
@@ -1984,19 +1960,6 @@ void EditorExportPlatformPC::set_chmod_flags(int p_flags) {
chmod_flags = p_flags;
}
-EditorExportPlatformPC::FixUpEmbeddedPckFunc EditorExportPlatformPC::get_fixup_embedded_pck_func() const {
- return fixup_embedded_pck_func;
-}
-
-void EditorExportPlatformPC::set_fixup_embedded_pck_func(FixUpEmbeddedPckFunc p_fixup_embedded_pck_func) {
- fixup_embedded_pck_func = p_fixup_embedded_pck_func;
-}
-
-EditorExportPlatformPC::EditorExportPlatformPC() {
- chmod_flags = -1;
- fixup_embedded_pck_func = nullptr;
-}
-
///////////////////////
void EditorExportTextSceneToBinaryPlugin::_export_file(const String &p_path, const String &p_type, const Set<String> &p_features) {
diff --git a/editor/editor_export.h b/editor/editor_export.h
index d9039f601e..108abab29b 100644
--- a/editor/editor_export.h
+++ b/editor/editor_export.h
@@ -421,23 +421,17 @@ public:
class EditorExportPlatformPC : public EditorExportPlatform {
GDCLASS(EditorExportPlatformPC, EditorExportPlatform);
-public:
- typedef Error (*FixUpEmbeddedPckFunc)(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size);
-
private:
Ref<ImageTexture> logo;
String name;
String os_name;
- Map<String, String> extensions;
String release_file_32;
String release_file_64;
String debug_file_32;
String debug_file_64;
- int chmod_flags;
-
- FixUpEmbeddedPckFunc fixup_embedded_pck_func;
+ int chmod_flags = -1;
public:
virtual void get_preset_features(const Ref<EditorExportPreset> &p_preset, List<String> *r_features) override;
@@ -449,11 +443,9 @@ public:
virtual Ref<Texture2D> get_logo() const override;
virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const override;
- virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const override;
virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) override;
virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path);
- void set_extension(const String &p_extension, const String &p_feature_key = "default");
void set_name(const String &p_name);
void set_os_name(const String &p_name);
@@ -471,10 +463,9 @@ public:
int get_chmod_flags() const;
void set_chmod_flags(int p_flags);
- FixUpEmbeddedPckFunc get_fixup_embedded_pck_func() const;
- void set_fixup_embedded_pck_func(FixUpEmbeddedPckFunc p_fixup_embedded_pck_func);
-
- EditorExportPlatformPC();
+ virtual Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) const {
+ return Error::OK;
+ }
};
class EditorExportTextSceneToBinaryPlugin : public EditorExportPlugin {
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index d01dfb5361..bf118b8e16 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -707,7 +707,10 @@ void EditorNode::_notification(int p_what) {
bool theme_changed =
EditorSettings::get_singleton()->check_changed_settings_in_group("interface/theme") ||
- EditorSettings::get_singleton()->check_changed_settings_in_group("text_editor/theme");
+ EditorSettings::get_singleton()->check_changed_settings_in_group("text_editor/theme") ||
+ EditorSettings::get_singleton()->check_changed_settings_in_group("interface/editor/font") ||
+ EditorSettings::get_singleton()->check_changed_settings_in_group("interface/editor/main_font") ||
+ EditorSettings::get_singleton()->check_changed_settings_in_group("interface/editor/code_font");
if (theme_changed) {
theme = create_custom_theme(theme_base->get_theme());
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index 2d80fe85f8..08cc957ec7 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -404,12 +404,12 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
const String display_scale_hint_string = vformat("Auto (%d%%),75%%,100%%,125%%,150%%,175%%,200%%,Custom", Math::round(get_auto_display_scale() * 100));
EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/display_scale", 0, display_scale_hint_string, PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
- _initial_set("interface/editor/enable_debugging_pseudolocalization", false);
- set_restart_if_changed("interface/editor/enable_debugging_pseudolocalization", true);
+ _initial_set("interface/editor/debug/enable_pseudolocalization", false);
+ set_restart_if_changed("interface/editor/debug/enable_pseudolocalization", true);
// Use pseudolocalization in editor.
EDITOR_SETTING_USAGE(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/editor/custom_display_scale", 1.0, "0.5,3,0.01", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
- EDITOR_SETTING_USAGE(Variant::INT, PROPERTY_HINT_RANGE, "interface/editor/main_font_size", 14, "8,48,1", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED)
+ EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "interface/editor/main_font_size", 14, "8,48,1")
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "interface/editor/code_font_size", 14, "8,48,1")
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/editor/code_font_contextual_ligatures", 0, "Default,Disable Contextual Alternates (Coding Ligatures),Use Custom OpenType Feature Set")
_initial_set("interface/editor/code_font_custom_opentype_features", "");
@@ -535,7 +535,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
// Appearance: Whitespace
_initial_set("text_editor/appearance/whitespace/draw_tabs", true);
_initial_set("text_editor/appearance/whitespace/draw_spaces", false);
- EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "text_editor/appearance/whitespace/line_spacing", 6, "0,50,1")
+ EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "text_editor/appearance/whitespace/line_spacing", 4, "0,50,1")
// Behavior
// Behavior: Navigation
@@ -716,6 +716,10 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
// Profiler
_initial_set("debugger/profiler_frame_history_size", 600);
+ // HTTP Proxy
+ _initial_set("network/http_proxy/host", "");
+ EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "network/http_proxy/port", 8080, "1,65535,1")
+
/* Extra config */
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "project_manager/sorting_order", 0, "Name,Path,Last Edited")
@@ -887,7 +891,7 @@ fail:
}
void EditorSettings::setup_language() {
- TranslationServer::get_singleton()->set_editor_pseudolocalization(get("interface/editor/enable_debugging_pseudolocalization"));
+ TranslationServer::get_singleton()->set_editor_pseudolocalization(get("interface/editor/debug/enable_pseudolocalization"));
String lang = get("interface/editor/editor_language");
if (lang == "en") {
return; // Default, nothing to do.
diff --git a/editor/export_template_manager.cpp b/editor/export_template_manager.cpp
index df3e73267e..7320f957c9 100644
--- a/editor/export_template_manager.cpp
+++ b/editor/export_template_manager.cpp
@@ -147,8 +147,8 @@ void ExportTemplateManager::_download_template(const String &p_url, bool p_skip_
download_templates->set_download_file(EditorPaths::get_singleton()->get_cache_dir().plus_file("tmp_templates.tpz"));
download_templates->set_use_threads(true);
- const String proxy_host = EDITOR_DEF("network/http_proxy/host", "");
- const int proxy_port = EDITOR_DEF("network/http_proxy/port", -1);
+ const String proxy_host = EDITOR_GET("network/http_proxy/host");
+ const int proxy_port = EDITOR_GET("network/http_proxy/port");
download_templates->set_http_proxy(proxy_host, proxy_port);
download_templates->set_https_proxy(proxy_host, proxy_port);
diff --git a/editor/plugins/skeleton_3d_editor_plugin.cpp b/editor/plugins/skeleton_3d_editor_plugin.cpp
index ef171e9115..065683d632 100644
--- a/editor/plugins/skeleton_3d_editor_plugin.cpp
+++ b/editor/plugins/skeleton_3d_editor_plugin.cpp
@@ -419,8 +419,14 @@ PhysicalBone3D *Skeleton3DEditor::create_physical_bone(int bone_id, int bone_chi
capsule_transform.basis = Basis(Vector3(1, 0, 0), Vector3(0, 0, 1), Vector3(0, -1, 0));
bone_shape->set_transform(capsule_transform);
+ /// Get an up vector not collinear with child rest origin
+ Vector3 up = Vector3(0, 1, 0);
+ if (up.cross(child_rest.origin).is_equal_approx(Vector3())) {
+ up = Vector3(0, 0, 1);
+ }
+
Transform3D body_transform;
- body_transform.basis = Basis::looking_at(child_rest.origin);
+ body_transform.basis = Basis::looking_at(child_rest.origin, up);
body_transform.origin = body_transform.basis.xform(Vector3(0, 0, -half_height));
Transform3D joint_transform;
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index 326720ce86..af3d65d4d6 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -277,6 +277,7 @@ Error GDScriptAnalyzer::resolve_inheritance(GDScriptParser::ClassNode *p_class,
base = parser->get_parser()->head->get_datatype();
} else {
if (p_class->extends.is_empty()) {
+ push_error("Could not resolve an empty super class path.", p_class);
return ERR_PARSE_ERROR;
}
const StringName &name = p_class->extends[extends_index++];
@@ -1124,6 +1125,10 @@ void GDScriptAnalyzer::resolve_function_signature(GDScriptParser::FunctionNode *
GDScriptParser::FunctionNode *previous_function = parser->current_function;
parser->current_function = p_function;
+#ifdef TOOLS_ENABLED
+ int default_value_count = 0;
+#endif // TOOLS_ENABLED
+
for (int i = 0; i < p_function->parameters.size(); i++) {
resolve_parameter(p_function->parameters[i]);
#ifdef DEBUG_ENABLED
@@ -1133,8 +1138,12 @@ void GDScriptAnalyzer::resolve_function_signature(GDScriptParser::FunctionNode *
is_shadowing(p_function->parameters[i]->identifier, "function parameter");
#endif // DEBUG_ENABLED
#ifdef TOOLS_ENABLED
- if (p_function->parameters[i]->default_value && p_function->parameters[i]->default_value->is_constant) {
- p_function->default_arg_values.push_back(p_function->parameters[i]->default_value->reduced_value);
+ if (p_function->parameters[i]->default_value) {
+ default_value_count++;
+
+ if (p_function->parameters[i]->default_value->is_constant) {
+ p_function->default_arg_values.push_back(p_function->parameters[i]->default_value->reduced_value);
+ }
}
#endif // TOOLS_ENABLED
}
@@ -1169,7 +1178,7 @@ void GDScriptAnalyzer::resolve_function_signature(GDScriptParser::FunctionNode *
int par_count_diff = p_function->parameters.size() - parameters_types.size();
valid = valid && par_count_diff >= 0;
- valid = valid && p_function->default_arg_values.size() >= default_par_count + par_count_diff;
+ valid = valid && default_value_count >= default_par_count + par_count_diff;
int i = 0;
for (const GDScriptParser::DataType &par_type : parameters_types) {
@@ -1203,7 +1212,7 @@ void GDScriptAnalyzer::resolve_function_signature(GDScriptParser::FunctionNode *
push_error(vformat(R"(The function signature doesn't match the parent. Parent signature is "%s".)", parent_signature), p_function);
}
}
-#endif
+#endif // TOOLS_ENABLED
}
parser->current_function = previous_function;
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index 725b62f6d6..10709d3667 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -1380,6 +1380,7 @@ GDScriptParser::AnnotationNode *GDScriptParser::parse_annotation(uint32_t p_vali
push_completion_call(annotation);
make_completion_context(COMPLETION_ANNOTATION_ARGUMENTS, annotation, 0, true);
if (!check(GDScriptTokenizer::Token::PARENTHESIS_CLOSE) && !is_at_end()) {
+ push_multiline(true);
int argument_index = 0;
do {
make_completion_context(COMPLETION_ANNOTATION_ARGUMENTS, annotation, argument_index, true);
@@ -1391,6 +1392,7 @@ GDScriptParser::AnnotationNode *GDScriptParser::parse_annotation(uint32_t p_vali
}
annotation->arguments.push_back(argument);
} while (match(GDScriptTokenizer::Token::COMMA));
+ pop_multiline();
consume(GDScriptTokenizer::Token::PARENTHESIS_CLOSE, R"*(Expected ")" after annotation arguments.)*");
}
@@ -3480,6 +3482,15 @@ template <PropertyHint t_hint, Variant::Type t_type>
bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node *p_node) {
ERR_FAIL_COND_V_MSG(p_node->type != Node::VARIABLE, false, vformat(R"("%s" annotation can only be applied to variables.)", p_annotation->name));
+ {
+ const int max_flags = 32;
+
+ if (t_hint == PropertyHint::PROPERTY_HINT_FLAGS && p_annotation->resolved_arguments.size() > max_flags) {
+ push_error(vformat(R"(The argument count limit for "@export_flags" is exceeded (%d/%d).)", p_annotation->resolved_arguments.size(), max_flags), p_annotation);
+ return false;
+ }
+ }
+
VariableNode *variable = static_cast<VariableNode *>(p_node);
if (variable->exported) {
push_error(vformat(R"(Annotation "%s" cannot be used with another "@export" annotation.)", p_annotation->name), p_annotation);
diff --git a/platform/linuxbsd/export/export.cpp b/platform/linuxbsd/export/export.cpp
index 796e82594a..e5caff2860 100644
--- a/platform/linuxbsd/export/export.cpp
+++ b/platform/linuxbsd/export/export.cpp
@@ -32,8 +32,6 @@
#include "export_plugin.h"
-static Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size);
-
void register_linuxbsd_exporter() {
Ref<EditorExportPlatformLinuxBSD> platform;
platform.instantiate();
@@ -52,112 +50,6 @@ void register_linuxbsd_exporter() {
platform->set_debug_64("linux_x11_64_debug");
platform->set_os_name("LinuxBSD");
platform->set_chmod_flags(0755);
- platform->set_fixup_embedded_pck_func(&fixup_embedded_pck);
EditorExport::get_singleton()->add_export_platform(platform);
}
-
-static Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) {
- // Patch the header of the "pck" section in the ELF file so that it corresponds to the embedded data
-
- FileAccess *f = FileAccess::open(p_path, FileAccess::READ_WRITE);
- if (!f) {
- return ERR_CANT_OPEN;
- }
-
- // Read and check ELF magic number
- {
- uint32_t magic = f->get_32();
- if (magic != 0x464c457f) { // 0x7F + "ELF"
- f->close();
- return ERR_FILE_CORRUPT;
- }
- }
-
- // Read program architecture bits from class field
-
- int bits = f->get_8() * 32;
-
- if (bits == 32 && p_embedded_size >= 0x100000000) {
- f->close();
- ERR_FAIL_V_MSG(ERR_INVALID_DATA, "32-bit executables cannot have embedded data >= 4 GiB.");
- }
-
- // Get info about the section header table
-
- int64_t section_table_pos;
- int64_t section_header_size;
- if (bits == 32) {
- section_header_size = 40;
- f->seek(0x20);
- section_table_pos = f->get_32();
- f->seek(0x30);
- } else { // 64
- section_header_size = 64;
- f->seek(0x28);
- section_table_pos = f->get_64();
- f->seek(0x3c);
- }
- int num_sections = f->get_16();
- int string_section_idx = f->get_16();
-
- // Load the strings table
- uint8_t *strings;
- {
- // Jump to the strings section header
- f->seek(section_table_pos + string_section_idx * section_header_size);
-
- // Read strings data size and offset
- int64_t string_data_pos;
- int64_t string_data_size;
- if (bits == 32) {
- f->seek(f->get_position() + 0x10);
- string_data_pos = f->get_32();
- string_data_size = f->get_32();
- } else { // 64
- f->seek(f->get_position() + 0x18);
- string_data_pos = f->get_64();
- string_data_size = f->get_64();
- }
-
- // Read strings data
- f->seek(string_data_pos);
- strings = (uint8_t *)memalloc(string_data_size);
- if (!strings) {
- f->close();
- return ERR_OUT_OF_MEMORY;
- }
- f->get_buffer(strings, string_data_size);
- }
-
- // Search for the "pck" section
-
- bool found = false;
- for (int i = 0; i < num_sections; ++i) {
- int64_t section_header_pos = section_table_pos + i * section_header_size;
- f->seek(section_header_pos);
-
- uint32_t name_offset = f->get_32();
- if (strcmp((char *)strings + name_offset, "pck") == 0) {
- // "pck" section found, let's patch!
-
- if (bits == 32) {
- f->seek(section_header_pos + 0x10);
- f->store_32(p_embedded_start);
- f->store_32(p_embedded_size);
- } else { // 64
- f->seek(section_header_pos + 0x18);
- f->store_64(p_embedded_start);
- f->store_64(p_embedded_size);
- }
-
- found = true;
- break;
- }
- }
-
- memfree(strings);
- f->close();
-
- return found ? OK : ERR_FILE_CORRUPT;
-}
diff --git a/platform/linuxbsd/export/export_plugin.cpp b/platform/linuxbsd/export/export_plugin.cpp
index 99f5b82b34..08fc9c0452 100644
--- a/platform/linuxbsd/export/export_plugin.cpp
+++ b/platform/linuxbsd/export/export_plugin.cpp
@@ -72,3 +72,129 @@ Error EditorExportPlatformLinuxBSD::export_project(const Ref<EditorExportPreset>
return err;
}
+
+void EditorExportPlatformLinuxBSD::set_extension(const String &p_extension, const String &p_feature_key) {
+ extensions[p_feature_key] = p_extension;
+}
+
+List<String> EditorExportPlatformLinuxBSD::get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const {
+ List<String> list;
+ for (const KeyValue<String, String> &E : extensions) {
+ if (p_preset->get(E.key)) {
+ list.push_back(extensions[E.key]);
+ return list;
+ }
+ }
+
+ if (extensions.has("default")) {
+ list.push_back(extensions["default"]);
+ return list;
+ }
+
+ return list;
+}
+
+Error EditorExportPlatformLinuxBSD::fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) const {
+ // Patch the header of the "pck" section in the ELF file so that it corresponds to the embedded data
+
+ FileAccess *f = FileAccess::open(p_path, FileAccess::READ_WRITE);
+ if (!f) {
+ return ERR_CANT_OPEN;
+ }
+
+ // Read and check ELF magic number
+ {
+ uint32_t magic = f->get_32();
+ if (magic != 0x464c457f) { // 0x7F + "ELF"
+ f->close();
+ return ERR_FILE_CORRUPT;
+ }
+ }
+
+ // Read program architecture bits from class field
+
+ int bits = f->get_8() * 32;
+
+ if (bits == 32 && p_embedded_size >= 0x100000000) {
+ f->close();
+ ERR_FAIL_V_MSG(ERR_INVALID_DATA, "32-bit executables cannot have embedded data >= 4 GiB.");
+ }
+
+ // Get info about the section header table
+
+ int64_t section_table_pos;
+ int64_t section_header_size;
+ if (bits == 32) {
+ section_header_size = 40;
+ f->seek(0x20);
+ section_table_pos = f->get_32();
+ f->seek(0x30);
+ } else { // 64
+ section_header_size = 64;
+ f->seek(0x28);
+ section_table_pos = f->get_64();
+ f->seek(0x3c);
+ }
+ int num_sections = f->get_16();
+ int string_section_idx = f->get_16();
+
+ // Load the strings table
+ uint8_t *strings;
+ {
+ // Jump to the strings section header
+ f->seek(section_table_pos + string_section_idx * section_header_size);
+
+ // Read strings data size and offset
+ int64_t string_data_pos;
+ int64_t string_data_size;
+ if (bits == 32) {
+ f->seek(f->get_position() + 0x10);
+ string_data_pos = f->get_32();
+ string_data_size = f->get_32();
+ } else { // 64
+ f->seek(f->get_position() + 0x18);
+ string_data_pos = f->get_64();
+ string_data_size = f->get_64();
+ }
+
+ // Read strings data
+ f->seek(string_data_pos);
+ strings = (uint8_t *)memalloc(string_data_size);
+ if (!strings) {
+ f->close();
+ return ERR_OUT_OF_MEMORY;
+ }
+ f->get_buffer(strings, string_data_size);
+ }
+
+ // Search for the "pck" section
+
+ bool found = false;
+ for (int i = 0; i < num_sections; ++i) {
+ int64_t section_header_pos = section_table_pos + i * section_header_size;
+ f->seek(section_header_pos);
+
+ uint32_t name_offset = f->get_32();
+ if (strcmp((char *)strings + name_offset, "pck") == 0) {
+ // "pck" section found, let's patch!
+
+ if (bits == 32) {
+ f->seek(section_header_pos + 0x10);
+ f->store_32(p_embedded_start);
+ f->store_32(p_embedded_size);
+ } else { // 64
+ f->seek(section_header_pos + 0x18);
+ f->store_64(p_embedded_start);
+ f->store_64(p_embedded_size);
+ }
+
+ found = true;
+ break;
+ }
+ }
+
+ memfree(strings);
+ f->close();
+
+ return found ? OK : ERR_FILE_CORRUPT;
+}
diff --git a/platform/linuxbsd/export/export_plugin.h b/platform/linuxbsd/export/export_plugin.h
index f482ddce3d..593916e586 100644
--- a/platform/linuxbsd/export/export_plugin.h
+++ b/platform/linuxbsd/export/export_plugin.h
@@ -38,10 +38,14 @@
#include "scene/resources/texture.h"
class EditorExportPlatformLinuxBSD : public EditorExportPlatformPC {
+ Map<String, String> extensions;
Error _export_debug_script(const Ref<EditorExportPreset> &p_preset, const String &p_app_name, const String &p_pkg_name, const String &p_path);
public:
+ void set_extension(const String &p_extension, const String &p_feature_key = "default");
+ virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const override;
virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) override;
+ virtual Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) const override;
};
#endif
diff --git a/platform/windows/export/export.cpp b/platform/windows/export/export.cpp
index 17a24c08bf..37fdf93ecf 100644
--- a/platform/windows/export/export.cpp
+++ b/platform/windows/export/export.cpp
@@ -32,8 +32,6 @@
#include "export_plugin.h"
-static Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size);
-
void register_windows_exporter() {
EDITOR_DEF("export/windows/rcedit", "");
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING, "export/windows/rcedit", PROPERTY_HINT_GLOBAL_FILE, "*.exe"));
@@ -57,84 +55,11 @@ void register_windows_exporter() {
logo->create_from_image(img);
platform->set_logo(logo);
platform->set_name("Windows Desktop");
- platform->set_extension("exe");
platform->set_release_32("windows_32_release.exe");
platform->set_debug_32("windows_32_debug.exe");
platform->set_release_64("windows_64_release.exe");
platform->set_debug_64("windows_64_debug.exe");
platform->set_os_name("Windows");
- platform->set_fixup_embedded_pck_func(&fixup_embedded_pck);
EditorExport::get_singleton()->add_export_platform(platform);
}
-
-static Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) {
- // Patch the header of the "pck" section in the PE file so that it corresponds to the embedded data
-
- FileAccess *f = FileAccess::open(p_path, FileAccess::READ_WRITE);
- if (!f) {
- return ERR_CANT_OPEN;
- }
-
- // Jump to the PE header and check the magic number
- {
- f->seek(0x3c);
- uint32_t pe_pos = f->get_32();
-
- f->seek(pe_pos);
- uint32_t magic = f->get_32();
- if (magic != 0x00004550) {
- f->close();
- return ERR_FILE_CORRUPT;
- }
- }
-
- // Process header
-
- int num_sections;
- {
- int64_t header_pos = f->get_position();
-
- f->seek(header_pos + 2);
- num_sections = f->get_16();
- f->seek(header_pos + 16);
- uint16_t opt_header_size = f->get_16();
-
- // Skip rest of header + optional header to go to the section headers
- f->seek(f->get_position() + 2 + opt_header_size);
- }
-
- // Search for the "pck" section
-
- int64_t section_table_pos = f->get_position();
-
- bool found = false;
- for (int i = 0; i < num_sections; ++i) {
- int64_t section_header_pos = section_table_pos + i * 40;
- f->seek(section_header_pos);
-
- uint8_t section_name[9];
- f->get_buffer(section_name, 8);
- section_name[8] = '\0';
-
- if (strcmp((char *)section_name, "pck") == 0) {
- // "pck" section found, let's patch!
-
- // Set virtual size to a little to avoid it taking memory (zero would give issues)
- f->seek(section_header_pos + 8);
- f->store_32(8);
-
- f->seek(section_header_pos + 16);
- f->store_32(p_embedded_size);
- f->seek(section_header_pos + 20);
- f->store_32(p_embedded_start);
-
- found = true;
- break;
- }
- }
-
- f->close();
-
- return found ? OK : ERR_FILE_CORRUPT;
-}
diff --git a/platform/windows/export/export_plugin.cpp b/platform/windows/export/export_plugin.cpp
index 7b9cb59896..f20cff90c1 100644
--- a/platform/windows/export/export_plugin.cpp
+++ b/platform/windows/export/export_plugin.cpp
@@ -86,6 +86,12 @@ Error EditorExportPlatformWindows::export_project(const Ref<EditorExportPreset>
return err;
}
+List<String> EditorExportPlatformWindows::get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const {
+ List<String> list;
+ list.push_back("exe");
+ return list;
+}
+
bool EditorExportPlatformWindows::get_export_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
// This option is not supported by "osslsigncode", used on non-Windows host.
if (!OS::get_singleton()->has_feature("windows") && p_option == "codesign/identity_type") {
@@ -403,3 +409,74 @@ bool EditorExportPlatformWindows::can_export(const Ref<EditorExportPreset> &p_pr
return valid;
}
+
+Error EditorExportPlatformWindows::fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) const {
+ // Patch the header of the "pck" section in the PE file so that it corresponds to the embedded data
+
+ FileAccess *f = FileAccess::open(p_path, FileAccess::READ_WRITE);
+ if (!f) {
+ return ERR_CANT_OPEN;
+ }
+
+ // Jump to the PE header and check the magic number
+ {
+ f->seek(0x3c);
+ uint32_t pe_pos = f->get_32();
+
+ f->seek(pe_pos);
+ uint32_t magic = f->get_32();
+ if (magic != 0x00004550) {
+ f->close();
+ return ERR_FILE_CORRUPT;
+ }
+ }
+
+ // Process header
+
+ int num_sections;
+ {
+ int64_t header_pos = f->get_position();
+
+ f->seek(header_pos + 2);
+ num_sections = f->get_16();
+ f->seek(header_pos + 16);
+ uint16_t opt_header_size = f->get_16();
+
+ // Skip rest of header + optional header to go to the section headers
+ f->seek(f->get_position() + 2 + opt_header_size);
+ }
+
+ // Search for the "pck" section
+
+ int64_t section_table_pos = f->get_position();
+
+ bool found = false;
+ for (int i = 0; i < num_sections; ++i) {
+ int64_t section_header_pos = section_table_pos + i * 40;
+ f->seek(section_header_pos);
+
+ uint8_t section_name[9];
+ f->get_buffer(section_name, 8);
+ section_name[8] = '\0';
+
+ if (strcmp((char *)section_name, "pck") == 0) {
+ // "pck" section found, let's patch!
+
+ // Set virtual size to a little to avoid it taking memory (zero would give issues)
+ f->seek(section_header_pos + 8);
+ f->store_32(8);
+
+ f->seek(section_header_pos + 16);
+ f->store_32(p_embedded_size);
+ f->seek(section_header_pos + 20);
+ f->store_32(p_embedded_start);
+
+ found = true;
+ break;
+ }
+ }
+
+ f->close();
+
+ return found ? OK : ERR_FILE_CORRUPT;
+}
diff --git a/platform/windows/export/export_plugin.h b/platform/windows/export/export_plugin.h
index b40e872461..04707a5667 100644
--- a/platform/windows/export/export_plugin.h
+++ b/platform/windows/export/export_plugin.h
@@ -45,9 +45,11 @@ class EditorExportPlatformWindows : public EditorExportPlatformPC {
public:
virtual Error export_project(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path, int p_flags = 0) override;
virtual Error sign_shared_object(const Ref<EditorExportPreset> &p_preset, bool p_debug, const String &p_path) override;
+ virtual List<String> get_binary_extensions(const Ref<EditorExportPreset> &p_preset) const override;
virtual void get_export_options(List<ExportOption> *r_options) override;
virtual bool get_export_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual bool can_export(const Ref<EditorExportPreset> &p_preset, String &r_error, bool &r_missing_templates) const override;
+ virtual Error fixup_embedded_pck(const String &p_path, int64_t p_embedded_start, int64_t p_embedded_size) const override;
};
#endif
diff --git a/scene/gui/progress_bar.cpp b/scene/gui/progress_bar.cpp
index 20b3513375..50ffb3ca67 100644
--- a/scene/gui/progress_bar.cpp
+++ b/scene/gui/progress_bar.cpp
@@ -100,7 +100,7 @@ bool ProgressBar::is_percent_visible() const {
void ProgressBar::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_percent_visible", "visible"), &ProgressBar::set_percent_visible);
ClassDB::bind_method(D_METHOD("is_percent_visible"), &ProgressBar::is_percent_visible);
- ADD_GROUP("Percent", "percent_");
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "percent_visible"), "set_percent_visible", "is_percent_visible");
}
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index b50f7866af..15d36d8230 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -978,6 +978,7 @@ void CanvasItem::_bind_methods() {
ADD_SIGNAL(MethodInfo("item_rect_changed"));
BIND_CONSTANT(NOTIFICATION_TRANSFORM_CHANGED);
+ BIND_CONSTANT(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
BIND_CONSTANT(NOTIFICATION_DRAW);
BIND_CONSTANT(NOTIFICATION_VISIBILITY_CHANGED);
BIND_CONSTANT(NOTIFICATION_ENTER_CANVAS);