Skip to content

Commit 0175be8

Browse files
committed
Merge pull request godotengine#89493 from KoBeWi/just_download_more_ram
Fix call queue problems when loading TileSet
2 parents 4163fb9 + a85921a commit 0175be8

File tree

2 files changed

+52
-17
lines changed

2 files changed

+52
-17
lines changed

scene/resources/2d/tile_set.cpp

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4981,7 +4981,7 @@ void TileSetAtlasSource::create_tile(const Vector2i p_atlas_coords, const Vector
49814981
_create_coords_mapping_cache(p_atlas_coords);
49824982
_queue_update_padded_texture();
49834983

4984-
emit_signal(SNAME("changed"));
4984+
_try_emit_changed();
49854985
}
49864986

49874987
void TileSetAtlasSource::remove_tile(Vector2i p_atlas_coords) {
@@ -5002,7 +5002,7 @@ void TileSetAtlasSource::remove_tile(Vector2i p_atlas_coords) {
50025002

50035003
_queue_update_padded_texture();
50045004

5005-
emit_signal(SNAME("changed"));
5005+
_try_emit_changed();
50065006
}
50075007

50085008
bool TileSetAtlasSource::has_tile(Vector2i p_atlas_coords) const {
@@ -5032,7 +5032,7 @@ void TileSetAtlasSource::set_tile_animation_columns(const Vector2i p_atlas_coord
50325032
_create_coords_mapping_cache(p_atlas_coords);
50335033
_queue_update_padded_texture();
50345034

5035-
emit_signal(SNAME("changed"));
5035+
_try_emit_changed();
50365036
}
50375037

50385038
int TileSetAtlasSource::get_tile_animation_columns(const Vector2i p_atlas_coords) const {
@@ -5055,7 +5055,7 @@ void TileSetAtlasSource::set_tile_animation_separation(const Vector2i p_atlas_co
50555055
_create_coords_mapping_cache(p_atlas_coords);
50565056
_queue_update_padded_texture();
50575057

5058-
emit_signal(SNAME("changed"));
5058+
_try_emit_changed();
50595059
}
50605060

50615061
Vector2i TileSetAtlasSource::get_tile_animation_separation(const Vector2i p_atlas_coords) const {
@@ -5069,7 +5069,7 @@ void TileSetAtlasSource::set_tile_animation_speed(const Vector2i p_atlas_coords,
50695069

50705070
tiles[p_atlas_coords].animation_speed = p_speed;
50715071

5072-
emit_signal(SNAME("changed"));
5072+
_try_emit_changed();
50735073
}
50745074

50755075
real_t TileSetAtlasSource::get_tile_animation_speed(const Vector2i p_atlas_coords) const {
@@ -5082,7 +5082,7 @@ void TileSetAtlasSource::set_tile_animation_mode(const Vector2i p_atlas_coords,
50825082

50835083
tiles[p_atlas_coords].animation_mode = p_mode;
50845084

5085-
emit_signal(SNAME("changed"));
5085+
_try_emit_changed();
50865086
}
50875087

50885088
TileSetAtlasSource::TileAnimationMode TileSetAtlasSource::get_tile_animation_mode(const Vector2i p_atlas_coords) const {
@@ -5116,7 +5116,7 @@ void TileSetAtlasSource::set_tile_animation_frames_count(const Vector2i p_atlas_
51165116

51175117
notify_property_list_changed();
51185118

5119-
emit_signal(SNAME("changed"));
5119+
_try_emit_changed();
51205120
}
51215121

51225122
int TileSetAtlasSource::get_tile_animation_frames_count(const Vector2i p_atlas_coords) const {
@@ -5131,7 +5131,7 @@ void TileSetAtlasSource::set_tile_animation_frame_duration(const Vector2i p_atla
51315131

51325132
tiles[p_atlas_coords].animation_frames_durations[p_frame_index] = p_duration;
51335133

5134-
emit_signal(SNAME("changed"));
5134+
_try_emit_changed();
51355135
}
51365136

51375137
real_t TileSetAtlasSource::get_tile_animation_frame_duration(const Vector2i p_atlas_coords, int p_frame_index) const {
@@ -5341,7 +5341,7 @@ void TileSetAtlasSource::move_tile_in_atlas(Vector2i p_atlas_coords, Vector2i p_
53415341
_create_coords_mapping_cache(new_atlas_coords);
53425342
_queue_update_padded_texture();
53435343

5344-
emit_signal(SNAME("changed"));
5344+
_try_emit_changed();
53455345
}
53465346

53475347
int TileSetAtlasSource::create_alternative_tile(const Vector2i p_atlas_coords, int p_alternative_id_override) {
@@ -5359,7 +5359,7 @@ int TileSetAtlasSource::create_alternative_tile(const Vector2i p_atlas_coords, i
53595359
tiles[p_atlas_coords].alternatives_ids.sort();
53605360
_compute_next_alternative_id(p_atlas_coords);
53615361

5362-
emit_signal(SNAME("changed"));
5362+
_try_emit_changed();
53635363

53645364
return new_alternative_id;
53655365
}
@@ -5375,7 +5375,7 @@ void TileSetAtlasSource::remove_alternative_tile(const Vector2i p_atlas_coords,
53755375
tiles[p_atlas_coords].alternatives_ids.erase(p_alternative_tile);
53765376
tiles[p_atlas_coords].alternatives_ids.sort();
53775377

5378-
emit_signal(SNAME("changed"));
5378+
_try_emit_changed();
53795379
}
53805380

53815381
void TileSetAtlasSource::set_alternative_tile_id(const Vector2i p_atlas_coords, int p_alternative_tile, int p_new_id) {
@@ -5393,7 +5393,7 @@ void TileSetAtlasSource::set_alternative_tile_id(const Vector2i p_atlas_coords,
53935393
tiles[p_atlas_coords].alternatives_ids.erase(p_alternative_tile);
53945394
tiles[p_atlas_coords].alternatives_ids.sort();
53955395

5396-
emit_signal(SNAME("changed"));
5396+
_try_emit_changed();
53975397
}
53985398

53995399
bool TileSetAtlasSource::has_alternative_tile(const Vector2i p_atlas_coords, int p_alternative_tile) const {
@@ -5427,6 +5427,12 @@ TileData *TileSetAtlasSource::get_tile_data(const Vector2i p_atlas_coords, int p
54275427
return tiles[p_atlas_coords].alternatives[p_alternative_tile];
54285428
}
54295429

5430+
void TileSetAtlasSource::_notification(int p_notification) {
5431+
if (p_notification == NOTIFICATION_POSTINITIALIZE) {
5432+
initializing = false;
5433+
}
5434+
}
5435+
54305436
void TileSetAtlasSource::_bind_methods() {
54315437
ClassDB::bind_method(D_METHOD("set_texture", "texture"), &TileSetAtlasSource::set_texture);
54325438
ClassDB::bind_method(D_METHOD("get_texture"), &TileSetAtlasSource::get_texture);
@@ -5569,6 +5575,9 @@ void TileSetAtlasSource::_create_coords_mapping_cache(Vector2i p_atlas_coords) {
55695575
}
55705576

55715577
void TileSetAtlasSource::_queue_update_padded_texture() {
5578+
if (padded_texture_needs_update) {
5579+
return;
5580+
}
55725581
padded_texture_needs_update = true;
55735582
callable_mp(this, &TileSetAtlasSource::_update_padded_texture).call_deferred();
55745583
}
@@ -5677,6 +5686,12 @@ void TileSetAtlasSource::_update_padded_texture() {
56775686
emit_changed();
56785687
}
56795688

5689+
void TileSetAtlasSource::_try_emit_changed() {
5690+
if (!initializing) {
5691+
emit_changed();
5692+
}
5693+
}
5694+
56805695
/////////////////////////////// TileSetScenesCollectionSource //////////////////////////////////////
56815696

56825697
void TileSetScenesCollectionSource::_compute_next_alternative_id() {
@@ -5685,6 +5700,12 @@ void TileSetScenesCollectionSource::_compute_next_alternative_id() {
56855700
};
56865701
}
56875702

5703+
void TileSetScenesCollectionSource::_try_emit_changed() {
5704+
if (!initializing) {
5705+
emit_changed();
5706+
}
5707+
}
5708+
56885709
int TileSetScenesCollectionSource::get_tiles_count() const {
56895710
return 1;
56905711
}
@@ -5725,7 +5746,7 @@ int TileSetScenesCollectionSource::create_scene_tile(Ref<PackedScene> p_packed_s
57255746
set_scene_tile_scene(new_scene_id, p_packed_scene);
57265747
_compute_next_alternative_id();
57275748

5728-
emit_signal(SNAME("changed"));
5749+
_try_emit_changed();
57295750

57305751
return new_scene_id;
57315752
}
@@ -5745,7 +5766,7 @@ void TileSetScenesCollectionSource::set_scene_tile_id(int p_id, int p_new_id) {
57455766
scenes.erase(p_id);
57465767
scenes_ids.erase(p_id);
57475768

5748-
emit_signal(SNAME("changed"));
5769+
_try_emit_changed();
57495770
}
57505771

57515772
void TileSetScenesCollectionSource::set_scene_tile_scene(int p_id, Ref<PackedScene> p_packed_scene) {
@@ -5769,7 +5790,7 @@ void TileSetScenesCollectionSource::set_scene_tile_scene(int p_id, Ref<PackedSce
57695790
} else {
57705791
scenes[p_id].scene = Ref<PackedScene>();
57715792
}
5772-
emit_signal(SNAME("changed"));
5793+
_try_emit_changed();
57735794
}
57745795

57755796
Ref<PackedScene> TileSetScenesCollectionSource::get_scene_tile_scene(int p_id) const {
@@ -5782,7 +5803,7 @@ void TileSetScenesCollectionSource::set_scene_tile_display_placeholder(int p_id,
57825803

57835804
scenes[p_id].display_placeholder = p_display_placeholder;
57845805

5785-
emit_signal(SNAME("changed"));
5806+
_try_emit_changed();
57865807
}
57875808

57885809
bool TileSetScenesCollectionSource::get_scene_tile_display_placeholder(int p_id) const {
@@ -5795,7 +5816,7 @@ void TileSetScenesCollectionSource::remove_scene_tile(int p_id) {
57955816

57965817
scenes.erase(p_id);
57975818
scenes_ids.erase(p_id);
5798-
emit_signal(SNAME("changed"));
5819+
_try_emit_changed();
57995820
}
58005821

58015822
int TileSetScenesCollectionSource::get_next_scene_tile_id() const {
@@ -5854,6 +5875,12 @@ void TileSetScenesCollectionSource::_get_property_list(List<PropertyInfo> *p_lis
58545875
}
58555876
}
58565877

5878+
void TileSetScenesCollectionSource::_notification(int p_notification) {
5879+
if (p_notification == NOTIFICATION_POSTINITIALIZE) {
5880+
initializing = false;
5881+
}
5882+
}
5883+
58575884
void TileSetScenesCollectionSource::_bind_methods() {
58585885
ClassDB::bind_method(D_METHOD("get_scene_tiles_count"), &TileSetScenesCollectionSource::get_scene_tiles_count);
58595886
ClassDB::bind_method(D_METHOD("get_scene_tile_id", "index"), &TileSetScenesCollectionSource::get_scene_tile_id);

scene/resources/2d/tile_set.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,8 @@ class TileSetAtlasSource : public TileSetSource {
637637
int next_alternative_id = 1;
638638
};
639639

640+
bool initializing = true;
641+
640642
Ref<Texture2D> texture;
641643
Vector2i margins;
642644
Vector2i separation;
@@ -660,12 +662,14 @@ class TileSetAtlasSource : public TileSetSource {
660662
void _queue_update_padded_texture();
661663
Ref<ImageTexture> _create_padded_image_texture(const Ref<Texture2D> &p_source);
662664
void _update_padded_texture();
665+
void _try_emit_changed();
663666

664667
protected:
665668
bool _set(const StringName &p_name, const Variant &p_value);
666669
bool _get(const StringName &p_name, Variant &r_ret) const;
667670
void _get_property_list(List<PropertyInfo> *p_list) const;
668671

672+
void _notification(int p_notification);
669673
static void _bind_methods();
670674

671675
public:
@@ -779,13 +783,17 @@ class TileSetScenesCollectionSource : public TileSetSource {
779783
HashMap<int, SceneData> scenes;
780784
int next_scene_id = 1;
781785

786+
bool initializing = true;
787+
782788
void _compute_next_alternative_id();
789+
void _try_emit_changed();
783790

784791
protected:
785792
bool _set(const StringName &p_name, const Variant &p_value);
786793
bool _get(const StringName &p_name, Variant &r_ret) const;
787794
void _get_property_list(List<PropertyInfo> *p_list) const;
788795

796+
void _notification(int p_notification);
789797
static void _bind_methods();
790798

791799
public:

0 commit comments

Comments
 (0)