Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow for Custom Runtime Identifiers #97776

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
e1cb65b
Apply `WS_MINIMIZE` style on window creation
shatyuka May 2, 2024
14f6c81
Offset drag instantiated scenes that result in a collision by its bou…
ryevdokimov Feb 18, 2024
2470eed
Call restart_editor() in RUN_PROJECT_MANAGER
KoBeWi Jul 28, 2024
e2c0346
Close expanded tile editor when inspector updates
KoBeWi Aug 1, 2024
5cf9afb
Don't fold resources when child of main inspector exits
KoBeWi Aug 4, 2024
b67eb68
Misc code cleanup in EditorFileDialog
KoBeWi Aug 15, 2024
42e5c5b
Allow horizontal scrolling in Tree using Shift
KoBeWi Aug 21, 2024
b01c2ef
Globally remember advanced toggle in project settings
KoBeWi Sep 5, 2024
beb55f7
[Editor] Try loading system Noto CJK font.
bruvzg Sep 11, 2024
971e154
GDExtension: Allow directly getting `ObjectID` from `Variant`
dsnopek Sep 17, 2024
22ccfc5
Print error on invalid call_group() calls
KoBeWi Sep 20, 2024
f2f34e9
Fix TabBar initialization issue and add tests
kitbdev Sep 20, 2024
cca54ba
Move pseudolocalization into TranslationDomain
timothyqiu Aug 28, 2024
59c6658
Fix ScrollContainer configuration warnings
KoBeWi Sep 21, 2024
866c50a
Add submenu support to EditorContextMenuPlugin
KoBeWi Sep 21, 2024
0ad1820
Metal: implement texture_create_from_extension
kroketio Sep 21, 2024
abf9d24
Make internal unique scene resource ID deterministic
reduz Sep 23, 2024
08947d3
Make RID_Owner lock-free for fetching.
reduz Dec 19, 2023
e63c858
[Docs] Adds notes about glyph contour decomposition format.
bruvzg Sep 26, 2024
66d2b0f
Fix closing Theme Editor not actually closing it
KoBeWi Sep 27, 2024
4c5094a
Use dedicated `print_error` method for colored output for unsupported…
dustdfg Sep 27, 2024
1abcfdd
Replace comments with printed warning for Metal on x86_64
dustdfg Sep 28, 2024
c1dc59f
Disable unused Basis Universal features to reduce binary size
Calinou May 14, 2022
210810b
Fix `atr_n()` behavior when auto translation is disabled
timothyqiu Sep 29, 2024
4c8f8e6
[macOS] Fix menu crash when used from opened native dialog.
bruvzg Oct 1, 2024
4cc9d2f
[Linux/BSD] Fix cross-device rename.
bruvzg Oct 2, 2024
25f439c
[DisplayServer] Implement has_hardware_keyboard method for Android an…
bruvzg Oct 2, 2024
b380584
Fix UI of sun angle in the sun/preview env popup
adamscott Oct 2, 2024
a7f6ec0
Add a sort method to Dictionary and HashMap
aaronfranke May 18, 2023
d2f3725
Fix window_set_current_screen for maximized windows.
bruvzg Oct 3, 2024
6286f9d
GDScript: Fix `GDScriptCache::get_full_script()` uses non-remapped path
dalexeev Oct 3, 2024
b15dfcf
Allow for Custom Runtime Identifiers
atlasapplications Oct 3, 2024
6aac039
Support object inspection through DAP `variables` request
rsubtil Sep 24, 2024
0d098d3
Support REPL expressions through DAP `evaluate` request
rsubtil Sep 30, 2024
9dd7a8a
Bump DAP requests timeout to 5 seconds
rsubtil Oct 3, 2024
65f3df5
Properly utilize surface information when creating pipelines and vert…
clayjohn Oct 3, 2024
1e1dbd8
Add `Auto width` behavior to ItemList
havi05 Jun 17, 2024
b2e38f3
Add unit tests for PhysicsMaterial
D0V4HKIIN Sep 20, 2024
62edb4e
Add filename filter field to FileDialog
vPumpking Feb 22, 2024
d6d8fb0
Merge pull request #97792 from clayjohn/RD-canvas-vertex-format
akien-mga Oct 4, 2024
e7d79f2
Merge pull request #77213 from aaronfranke/sort-dict
akien-mga Oct 4, 2024
a70402b
Merge pull request #88673 from vPumpking/FileDialog-Filter
akien-mga Oct 4, 2024
058f06c
Merge pull request #93270 from Gamemap/feature-itemlist-autowidth
akien-mga Oct 4, 2024
05b519f
Merge pull request #96230 from timothyqiu/per-domain-pseudolocalization
akien-mga Oct 4, 2024
b7ed7f7
Merge pull request #96850 from bruvzg/noto_cjk_lookup
akien-mga Oct 4, 2024
d5d014e
Merge pull request #97227 from D0V4HKIIN/master
akien-mga Oct 4, 2024
2d8bfab
Merge pull request #97255 from kitbdev/test-tabs
akien-mga Oct 4, 2024
8e6ade8
Merge pull request #97465 from DarioSamo/lock-free-rid
akien-mga Oct 4, 2024
84768ab
Merge pull request #97514 from bruvzg/font_contour_info
akien-mga Oct 4, 2024
783b150
Merge pull request #97585 from rsubtil/feature-dap_object_inspection
akien-mga Oct 4, 2024
6d9a797
Merge pull request #97624 from timothyqiu/atrn
akien-mga Oct 4, 2024
dedb2ff
Merge pull request #97678 from bruvzg/fix_nd_menu
akien-mga Oct 4, 2024
6e03910
Merge pull request #97719 from bruvzg/cross_dev_rename
akien-mga Oct 4, 2024
5ac62a6
Merge pull request #97743 from bruvzg/has_kbd
akien-mga Oct 4, 2024
34920b4
Merge pull request #97747 from adamscott/ux-sun-angle
akien-mga Oct 4, 2024
c28dd31
Merge pull request #97757 from bruvzg/max_move_screen
akien-mga Oct 4, 2024
32239d4
Merge pull request #97769 from dalexeev/gds-fix-gdscript-cache-path
akien-mga Oct 4, 2024
f84f734
Expose `LineEdit` `edit` and `unedit` methods.
WhalesState Oct 4, 2024
de07df5
Merge pull request #85321 from Calinou/basis-universal-disable-unused…
akien-mga Oct 4, 2024
36837bf
Merge pull request #91487 from shatyuka/window-style
akien-mga Oct 4, 2024
f032af7
Merge pull request #97304 from kroketio/metal-return-logical-device-h…
akien-mga Oct 4, 2024
4c520e9
[iOS] Add support for dark and tinted icon versions.
bruvzg Oct 3, 2024
975e7c8
[GraphEdit] Only print warning for connection layer deletion when jus…
Geometror Oct 4, 2024
fa1aacb
Configure MSAA properly in canvas renderer's pipelines.
DarioSamo Oct 4, 2024
35b3999
Make the "Quick Open" dialog available via EditorInterface
ydeltastar Sep 30, 2024
d11f203
Merge pull request #97094 from WhalesState/expose-edit-unedit
akien-mga Oct 4, 2024
4dd812f
Merge pull request #97119 from dsnopek/gdextension-object-instance-id
akien-mga Oct 4, 2024
6c15d59
Merge pull request #97362 from reduz/make-unique-scene-id-deterministic
akien-mga Oct 4, 2024
c46d1e4
Merge pull request #97552 from dustdfg/drivers/use_dedicated_print_error
akien-mga Oct 4, 2024
428c4a6
Merge pull request #97633 from ydeltastar/quickly-quick-open
akien-mga Oct 4, 2024
3576e84
Merge pull request #97789 from bruvzg/ios_icons
akien-mga Oct 4, 2024
794920b
Partially revert 96780, remove warnings from project/editor settings …
bruvzg Oct 4, 2024
08af57f
Fix quick open background panel style
passivestar Oct 4, 2024
4a747bd
Add _resource_changed() helper method to EditorResourcePicker
KoBeWi Aug 31, 2024
2135346
Merge pull request #88511 from ryevdokimov/offset-drag-to-instantiate…
akien-mga Oct 4, 2024
aa40773
Merge pull request #94880 from KoBeWi/never-before-seen_way_to_restar…
akien-mga Oct 4, 2024
fe31ede
Merge pull request #95034 from KoBeWi/take_a_problem_and_make_it_wors…
akien-mga Oct 4, 2024
b08a3d8
Merge pull request #95149 from KoBeWi/inspector_mains
akien-mga Oct 4, 2024
0d1873d
Merge pull request #95544 from KoBeWi/clean_code™
akien-mga Oct 4, 2024
19081a8
Merge pull request #95889 from KoBeWi/tree_growing_sideways
akien-mga Oct 4, 2024
c36c153
Merge pull request #96379 from KoBeWi/wind_of_resource_changes
akien-mga Oct 4, 2024
0c3ff56
Merge pull request #96615 from KoBeWi/run_as_administrator
akien-mga Oct 4, 2024
14eee2b
Merge pull request #97240 from KoBeWi/wrong_number
akien-mga Oct 4, 2024
9108c62
Merge pull request #97291 from KoBeWi/visible_in_tree_was_a_billion_d…
akien-mga Oct 4, 2024
e5688f5
Merge pull request #97292 from KoBeWi/infinite_submenus_in_your_editor
akien-mga Oct 4, 2024
def5a04
Merge pull request #97543 from KoBeWi/to_edit_or_not_to_edit
akien-mga Oct 4, 2024
b0d5126
Merge pull request #97570 from dustdfg/ios_macos/print_warning_instea…
akien-mga Oct 4, 2024
f6dbc04
Merge pull request #97809 from Geometror/fix-ge-conn-layer-warning
akien-mga Oct 4, 2024
41c55f0
Merge pull request #97811 from DarioSamo/2d-msaa-fix
akien-mga Oct 4, 2024
aaffffc
Merge pull request #97817 from bruvzg/prop_warn_remove
akien-mga Oct 4, 2024
db66bd3
Merge pull request #97820 from passivestar/quick-open-bg
akien-mga Oct 4, 2024
5690bd0
Allow for Custom Runtime Identifiers
atlasapplications Oct 3, 2024
a279e2e
Create Android NativeAOT Export Template
atlasapplications Oct 6, 2024
2634f4e
Expand NativeAOT templates to other platforms
atlasapplications Oct 6, 2024
50fead9
Merge branch 'custom-runtimeidentifier' of https://github.com/atlasap…
atlasapplications Oct 6, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion core/config/project_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,6 @@ bool ProjectSettings::_get(const StringName &p_name, Variant &r_ret) const {
_THREAD_SAFE_METHOD_

if (!props.has(p_name)) {
WARN_PRINT("Property not found: " + String(p_name));
return false;
}
r_ret = props[p_name].variant;
Expand Down
9 changes: 9 additions & 0 deletions core/extension/gdextension_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,14 @@ static GDExtensionBool gdextension_variant_has_key(GDExtensionConstVariantPtr p_
return ret;
}

static GDObjectInstanceID gdextension_variant_get_object_instance_id(GDExtensionConstVariantPtr p_self) {
const Variant *self = (const Variant *)p_self;
if (likely(self->get_type() == Variant::OBJECT)) {
return self->operator ObjectID();
}
return 0;
}

static void gdextension_variant_get_type_name(GDExtensionVariantType p_type, GDExtensionUninitializedVariantPtr r_ret) {
String name = Variant::get_type_name((Variant::Type)p_type);
memnew_placement(r_ret, String(name));
Expand Down Expand Up @@ -1610,6 +1618,7 @@ void gdextension_setup_interface() {
REGISTER_INTERFACE_FUNC(variant_has_method);
REGISTER_INTERFACE_FUNC(variant_has_member);
REGISTER_INTERFACE_FUNC(variant_has_key);
REGISTER_INTERFACE_FUNC(variant_get_object_instance_id);
REGISTER_INTERFACE_FUNC(variant_get_type_name);
REGISTER_INTERFACE_FUNC(variant_can_convert);
REGISTER_INTERFACE_FUNC(variant_can_convert_strict);
Expand Down
15 changes: 15 additions & 0 deletions core/extension/gdextension_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -1307,6 +1307,21 @@ typedef GDExtensionBool (*GDExtensionInterfaceVariantHasMember)(GDExtensionVaria
*/
typedef GDExtensionBool (*GDExtensionInterfaceVariantHasKey)(GDExtensionConstVariantPtr p_self, GDExtensionConstVariantPtr p_key, GDExtensionBool *r_valid);

/**
* @name variant_get_object_instance_id
* @since 4.4
*
* Gets the object instance ID from a variant of type GDEXTENSION_VARIANT_TYPE_OBJECT.
*
* If the variant isn't of type GDEXTENSION_VARIANT_TYPE_OBJECT, then zero will be returned.
* The instance ID will be returned even if the object is no longer valid - use `object_get_instance_by_id()` to check if the object is still valid.
*
* @param p_self A pointer to the Variant.
*
* @return The instance ID for the contained object.
*/
typedef GDObjectInstanceID (*GDExtensionInterfaceVariantGetObjectInstanceId)(GDExtensionConstVariantPtr p_self);

/**
* @name variant_get_type_name
* @since 4.1
Expand Down
33 changes: 22 additions & 11 deletions core/io/resource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -99,31 +99,42 @@ void Resource::set_path_cache(const String &p_path) {
GDVIRTUAL_CALL(_set_path_cache, p_path);
}

static thread_local RandomPCG unique_id_gen(0, RandomPCG::DEFAULT_INC);

void Resource::seed_scene_unique_id(uint32_t p_seed) {
unique_id_gen.seed(p_seed);
}

String Resource::generate_scene_unique_id() {
// Generate a unique enough hash, but still user-readable.
// If it's not unique it does not matter because the saver will try again.
OS::DateTime dt = OS::get_singleton()->get_datetime();
uint32_t hash = hash_murmur3_one_32(OS::get_singleton()->get_ticks_usec());
hash = hash_murmur3_one_32(dt.year, hash);
hash = hash_murmur3_one_32(dt.month, hash);
hash = hash_murmur3_one_32(dt.day, hash);
hash = hash_murmur3_one_32(dt.hour, hash);
hash = hash_murmur3_one_32(dt.minute, hash);
hash = hash_murmur3_one_32(dt.second, hash);
hash = hash_murmur3_one_32(Math::rand(), hash);
if (unique_id_gen.get_seed() == 0) {
OS::DateTime dt = OS::get_singleton()->get_datetime();
uint32_t hash = hash_murmur3_one_32(OS::get_singleton()->get_ticks_usec());
hash = hash_murmur3_one_32(dt.year, hash);
hash = hash_murmur3_one_32(dt.month, hash);
hash = hash_murmur3_one_32(dt.day, hash);
hash = hash_murmur3_one_32(dt.hour, hash);
hash = hash_murmur3_one_32(dt.minute, hash);
hash = hash_murmur3_one_32(dt.second, hash);
hash = hash_murmur3_one_32(Math::rand(), hash);
unique_id_gen.seed(hash);
}

uint32_t random_num = unique_id_gen.rand();

static constexpr uint32_t characters = 5;
static constexpr uint32_t char_count = ('z' - 'a');
static constexpr uint32_t base = char_count + ('9' - '0');
String id;
for (uint32_t i = 0; i < characters; i++) {
uint32_t c = hash % base;
uint32_t c = random_num % base;
if (c < char_count) {
id += String::chr('a' + c);
} else {
id += String::chr('0' + (c - char_count));
}
hash /= base;
random_num /= base;
}

return id;
Expand Down
1 change: 1 addition & 0 deletions core/io/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ class Resource : public RefCounted {
virtual void set_path_cache(const String &p_path); // Set raw path without involving resource cache.
_FORCE_INLINE_ bool is_built_in() const { return path_cache.is_empty() || path_cache.contains("::") || path_cache.begins_with("local://"); }

static void seed_scene_unique_id(uint32_t p_seed);
static String generate_scene_unique_id();
void set_scene_unique_id(const String &p_id);
String get_scene_unique_id() const;
Expand Down
40 changes: 20 additions & 20 deletions core/io/resource_format_binary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -845,29 +845,27 @@ Error ResourceLoaderBinary::load() {
}
}

if (ClassDB::has_property(res->get_class_name(), name)) {
if (value.get_type() == Variant::ARRAY) {
Array set_array = value;
bool is_get_valid = false;
Variant get_value = res->get(name, &is_get_valid);
if (is_get_valid && get_value.get_type() == Variant::ARRAY) {
Array get_array = get_value;
if (!set_array.is_same_typed(get_array)) {
value = Array(set_array, get_array.get_typed_builtin(), get_array.get_typed_class_name(), get_array.get_typed_script());
}
if (value.get_type() == Variant::ARRAY) {
Array set_array = value;
bool is_get_valid = false;
Variant get_value = res->get(name, &is_get_valid);
if (is_get_valid && get_value.get_type() == Variant::ARRAY) {
Array get_array = get_value;
if (!set_array.is_same_typed(get_array)) {
value = Array(set_array, get_array.get_typed_builtin(), get_array.get_typed_class_name(), get_array.get_typed_script());
}
}
}

if (value.get_type() == Variant::DICTIONARY) {
Dictionary set_dict = value;
bool is_get_valid = false;
Variant get_value = res->get(name, &is_get_valid);
if (is_get_valid && get_value.get_type() == Variant::DICTIONARY) {
Dictionary get_dict = get_value;
if (!set_dict.is_same_typed(get_dict)) {
value = Dictionary(set_dict, get_dict.get_typed_key_builtin(), get_dict.get_typed_key_class_name(), get_dict.get_typed_key_script(),
get_dict.get_typed_value_builtin(), get_dict.get_typed_value_class_name(), get_dict.get_typed_value_script());
}
if (value.get_type() == Variant::DICTIONARY) {
Dictionary set_dict = value;
bool is_get_valid = false;
Variant get_value = res->get(name, &is_get_valid);
if (is_get_valid && get_value.get_type() == Variant::DICTIONARY) {
Dictionary get_dict = get_value;
if (!set_dict.is_same_typed(get_dict)) {
value = Dictionary(set_dict, get_dict.get_typed_key_builtin(), get_dict.get_typed_key_class_name(), get_dict.get_typed_key_script(),
get_dict.get_typed_value_builtin(), get_dict.get_typed_value_class_name(), get_dict.get_typed_value_script());
}
}
}
Expand Down Expand Up @@ -2136,6 +2134,8 @@ static String _resource_get_class(Ref<Resource> p_resource) {
}

Error ResourceFormatSaverBinaryInstance::save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags) {
Resource::seed_scene_unique_id(p_path.hash());

Error err;
Ref<FileAccess> f;
if (p_flags & ResourceSaver::FLAG_COMPRESS) {
Expand Down
Loading
Loading