mirror of https://github.com/OpenRCT2/OpenRCT2.git
Remove most usages of object_entry_groups
This commit is contained in:
parent
d905dde070
commit
4d8fe051e8
|
@ -686,12 +686,11 @@ static void window_editor_inventions_list_paint(rct_window *w, rct_drawpixelinfo
|
|||
if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE)
|
||||
objectEntryType = OBJECT_TYPE_RIDE;
|
||||
|
||||
void * chunk = object_entry_groups[objectEntryType].chunks[researchItem->entryIndex];
|
||||
|
||||
auto chunk = object_entry_get_chunk(objectEntryType, researchItem->entryIndex);
|
||||
if (chunk == nullptr)
|
||||
return;
|
||||
|
||||
rct_object_entry * entry = &object_entry_groups[objectEntryType].entries[researchItem->entryIndex].entry;
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(objectEntryType, researchItem->entryIndex);
|
||||
|
||||
// Draw preview
|
||||
widget = &w->widgets[WIDX_PREVIEW];
|
||||
|
|
|
@ -1226,7 +1226,7 @@ static void window_editor_object_selection_manage_tracks()
|
|||
gS6Info.editor_step = EDITOR_STEP_TRACK_DESIGNS_MANAGER;
|
||||
|
||||
sint32 entry_index = 0;
|
||||
for (; (object_entry_groups[0].chunks[entry_index]) == nullptr; ++entry_index);
|
||||
for (; object_entry_get_chunk(OBJECT_TYPE_RIDE, entry_index) == nullptr; entry_index++);
|
||||
|
||||
rct_ride_entry* ride_entry = get_ride_entry(entry_index);
|
||||
uint8 ride_type = ride_entry_get_first_non_null_ride_type(ride_entry);
|
||||
|
|
|
@ -814,12 +814,7 @@ static void window_editor_objective_options_main_textinput(rct_window *w, rct_wi
|
|||
*/
|
||||
static void window_editor_objective_options_main_invalidate(rct_window *w)
|
||||
{
|
||||
rct_widget *widgets;
|
||||
rct_stex_entry *stex;
|
||||
|
||||
stex = g_stexEntries[0];
|
||||
|
||||
widgets = window_editor_objective_options_widgets[w->page];
|
||||
auto widgets = window_editor_objective_options_widgets[w->page];
|
||||
if (w->widgets != widgets) {
|
||||
w->widgets = widgets;
|
||||
window_init_scroll_widgets(w);
|
||||
|
@ -827,6 +822,7 @@ static void window_editor_objective_options_main_invalidate(rct_window *w)
|
|||
|
||||
window_editor_objective_options_set_pressed_tab(w);
|
||||
|
||||
auto stex = (rct_stex_entry *)object_entry_get_chunk(OBJECT_TYPE_SCENARIO_TEXT, 0);
|
||||
if (stex == nullptr)
|
||||
w->disabled_widgets &= ~((1 << WIDX_PARK_NAME) | (1 << WIDX_SCENARIO_NAME));
|
||||
else
|
||||
|
@ -877,7 +873,6 @@ static void window_editor_objective_options_main_invalidate(rct_window *w)
|
|||
*/
|
||||
static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpixelinfo *dpi)
|
||||
{
|
||||
rct_stex_entry *stex;
|
||||
sint32 x, y, width;
|
||||
rct_string_id stringId;
|
||||
uint32 arg;
|
||||
|
@ -885,8 +880,6 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi
|
|||
window_draw_widgets(w, dpi);
|
||||
window_editor_objective_options_draw_tab_images(w, dpi);
|
||||
|
||||
stex = g_stexEntries[0];
|
||||
|
||||
// Objective label
|
||||
x = w->x + 8;
|
||||
y = w->y + w->widgets[WIDX_OBJECTIVE].top;
|
||||
|
@ -983,6 +976,7 @@ static void window_editor_objective_options_main_paint(rct_window *w, rct_drawpi
|
|||
y = w->y + w->widgets[WIDX_PARK_NAME].top;
|
||||
width = w->widgets[WIDX_PARK_NAME].left - 16;
|
||||
|
||||
auto stex = (rct_stex_entry *)object_entry_get_chunk(OBJECT_TYPE_SCENARIO_TEXT, 0);
|
||||
if (stex != nullptr) {
|
||||
set_format_arg(0, rct_string_id, stex->park_name);
|
||||
} else {
|
||||
|
|
|
@ -349,7 +349,7 @@ static ride_list_item * window_new_ride_iterate_over_ride_group(uint8 rideType,
|
|||
{
|
||||
uint8 rideEntryIndex = *rideEntryIndexPtr++;
|
||||
char rideEntryName[DAT_NAME_LENGTH + 1];
|
||||
memcpy(rideEntryName,object_entry_groups[OBJECT_TYPE_RIDE].entries[rideEntryIndex].name,8);
|
||||
memcpy(rideEntryName, object_entry_get_entry(OBJECT_TYPE_RIDE, rideEntryIndex)->name, 8);
|
||||
rideEntryName[DAT_NAME_LENGTH] = 0;
|
||||
|
||||
// Skip if vehicle type is not invented yet
|
||||
|
|
|
@ -113,7 +113,7 @@ void setup_in_use_selection_flags()
|
|||
for (sint32 i = 0; i < object_entry_group_counts[objectType]; i++)
|
||||
{
|
||||
Editor::ClearSelectedObject(objectType, i, OBJECT_SELECTION_FLAG_ALL);
|
||||
if (object_entry_groups[objectType].chunks[i] != nullptr)
|
||||
if (object_entry_get_chunk(objectType, i) != nullptr)
|
||||
{
|
||||
Editor::SetSelectedObject(objectType, i, OBJECT_SELECTION_FLAG_2);
|
||||
}
|
||||
|
@ -274,7 +274,7 @@ static void remove_selected_objects_from_research(const rct_object_entry* instal
|
|||
return;
|
||||
|
||||
if (entry_type == OBJECT_TYPE_RIDE){
|
||||
rct_ride_entry* rideEntry = (rct_ride_entry*)object_entry_groups[entry_type].chunks[entry_index];
|
||||
auto rideEntry = (rct_ride_entry *)object_entry_get_entry(entry_type, entry_index);
|
||||
|
||||
for (auto rideType : rideEntry->ride_type)
|
||||
{
|
||||
|
|
|
@ -177,7 +177,7 @@ enum
|
|||
*/
|
||||
void update_palette_effects()
|
||||
{
|
||||
rct_water_type * water_type = (rct_water_type *) object_entry_groups[OBJECT_TYPE_WATER].chunks[0];
|
||||
auto water_type = (rct_water_type *)object_entry_get_chunk(OBJECT_TYPE_WATER, 0);
|
||||
|
||||
if (gClimateLightningFlash == 1)
|
||||
{
|
||||
|
|
|
@ -537,7 +537,7 @@ void load_palette()
|
|||
return;
|
||||
}
|
||||
|
||||
rct_water_type* water_type = (rct_water_type*)object_entry_groups[OBJECT_TYPE_WATER].chunks[0];
|
||||
auto water_type = (rct_water_type *)object_entry_get_chunk(OBJECT_TYPE_WATER, 0);
|
||||
|
||||
uint32 palette = 0x5FC;
|
||||
|
||||
|
|
|
@ -1196,7 +1196,8 @@ static sint32 cc_object_count(const utf8 **argv, sint32 argc) {
|
|||
|
||||
sint32 entryGroupIndex = 0;
|
||||
for (; entryGroupIndex < object_entry_group_counts[i]; entryGroupIndex++){
|
||||
if (object_entry_groups[i].chunks[entryGroupIndex] == nullptr){
|
||||
if (object_entry_get_chunk(i, entryGroupIndex) == nullptr)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -233,3 +233,6 @@ const rct_object_entry * object_list_find_by_name(const char *name);
|
|||
const rct_object_entry * object_list_find(rct_object_entry *entry);
|
||||
|
||||
void object_entry_get_name_fixed(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry);
|
||||
|
||||
void * object_entry_get_chunk(sint32 objectType, size_t index);
|
||||
rct_object_entry_extended * object_entry_get_entry(sint32 objectType, size_t index);
|
||||
|
|
|
@ -133,26 +133,27 @@ void object_create_identifier_name(char* string_buffer, size_t size, const rct_o
|
|||
*/
|
||||
bool find_object_in_entry_group(const rct_object_entry * entry, uint8 * entry_type, uint8 * entry_index)
|
||||
{
|
||||
if ((entry->flags & 0xF) >= Util::CountOf(object_entry_groups)) {
|
||||
return false;
|
||||
}
|
||||
*entry_type = entry->flags & 0xF;
|
||||
rct_object_entry_group entry_group = object_entry_groups[*entry_type];
|
||||
for (*entry_index = 0;
|
||||
*entry_index < object_entry_group_counts[*entry_type];
|
||||
++(*entry_index), entry_group.chunks++, entry_group.entries++)
|
||||
sint32 objectType = object_entry_get_type(entry);
|
||||
if (objectType >= OBJECT_TYPE_COUNT)
|
||||
{
|
||||
if (*entry_group.chunks == nullptr)
|
||||
continue;
|
||||
|
||||
if (object_entry_compare((rct_object_entry*)entry_group.entries, entry))
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (*entry_index == object_entry_group_counts[*entry_type])
|
||||
return false;
|
||||
|
||||
return true;
|
||||
auto maxObjects = object_entry_group_counts[objectType];
|
||||
for (sint32 i = 0; i < maxObjects; i++)
|
||||
{
|
||||
if (object_entry_get_chunk(objectType, i) != nullptr)
|
||||
{
|
||||
auto thisEntry = (rct_object_entry *)object_entry_get_entry(*entry_type, i);
|
||||
if (object_entry_compare(thisEntry, entry))
|
||||
{
|
||||
*entry_type = objectType;
|
||||
*entry_index = i;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void get_type_entry_index(size_t index, uint8 * outObjectType, uint8 * outEntryIndex)
|
||||
|
@ -177,17 +178,14 @@ const rct_object_entry * get_loaded_object_entry(size_t index)
|
|||
uint8 objectType, entryIndex;
|
||||
get_type_entry_index(index, &objectType, &entryIndex);
|
||||
|
||||
rct_object_entry * entry = (rct_object_entry *)&(object_entry_groups[objectType].entries[entryIndex]);
|
||||
return entry;
|
||||
return (rct_object_entry *)object_entry_get_entry(objectType, entryIndex);
|
||||
}
|
||||
|
||||
void * get_loaded_object_chunk(size_t index)
|
||||
{
|
||||
uint8 objectType, entryIndex;
|
||||
get_type_entry_index(index, &objectType, &entryIndex);
|
||||
|
||||
void *entry = object_entry_groups[objectType].chunks[entryIndex];
|
||||
return entry;
|
||||
return object_entry_get_chunk(objectType, entryIndex);
|
||||
}
|
||||
|
||||
void object_entry_get_name_fixed(utf8 * buffer, size_t bufferSize, const rct_object_entry * entry)
|
||||
|
@ -196,3 +194,13 @@ void object_entry_get_name_fixed(utf8 * buffer, size_t bufferSize, const rct_obj
|
|||
memcpy(buffer, entry->name, bufferSize - 1);
|
||||
buffer[bufferSize - 1] = 0;
|
||||
}
|
||||
|
||||
void * object_entry_get_chunk(sint32 objectType, size_t index)
|
||||
{
|
||||
return object_entry_groups[objectType].chunks[index];
|
||||
}
|
||||
|
||||
rct_object_entry_extended * object_entry_get_entry(sint32 objectType, size_t index)
|
||||
{
|
||||
return &object_entry_groups[objectType].entries[index];
|
||||
}
|
||||
|
|
|
@ -385,7 +385,7 @@ private:
|
|||
uint8 objectType, entryIndex;
|
||||
get_type_entry_index(i, &objectType, &entryIndex);
|
||||
|
||||
rct_object_entry_extended * legacyEntry = &object_entry_groups[objectType].entries[entryIndex];
|
||||
rct_object_entry_extended * legacyEntry = object_entry_get_entry(objectType, entryIndex);
|
||||
void * * legacyChunk = &object_entry_groups[objectType].chunks[entryIndex];
|
||||
if (loadedObject == nullptr)
|
||||
{
|
||||
|
|
|
@ -220,7 +220,7 @@ static void park_entrance_paint(paint_session * session, uint8 direction, sint32
|
|||
sub_98197C(session, image_id, 0, 0, 32, 0x1C, 0, height, 0, 2, height, get_current_rotation());
|
||||
}
|
||||
|
||||
entrance = (rct_entrance_type*)object_entry_groups[OBJECT_TYPE_PARK_ENTRANCE].chunks[0];
|
||||
entrance = (rct_entrance_type *)object_entry_get_chunk(OBJECT_TYPE_PARK_ENTRANCE, 0);
|
||||
if (entrance == nullptr)
|
||||
{
|
||||
return;
|
||||
|
@ -267,7 +267,7 @@ static void park_entrance_paint(paint_session * session, uint8 direction, sint32
|
|||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
entrance = (rct_entrance_type*)object_entry_groups[OBJECT_TYPE_PARK_ENTRANCE].chunks[0];
|
||||
entrance = (rct_entrance_type *)object_entry_get_chunk(OBJECT_TYPE_PARK_ENTRANCE, 0);
|
||||
if (entrance == nullptr)
|
||||
{
|
||||
return;
|
||||
|
|
|
@ -250,7 +250,7 @@ void get_ride_entry_name(char *name, sint32 index)
|
|||
return;
|
||||
}
|
||||
|
||||
const char *entryName = object_entry_groups[OBJECT_TYPE_RIDE].entries[index].name;
|
||||
const auto entryName = object_entry_get_entry(OBJECT_TYPE_RIDE, index)->name;
|
||||
memcpy(name, entryName, 8);
|
||||
name[8] = '\0';
|
||||
}
|
||||
|
|
|
@ -492,7 +492,7 @@ static void track_design_mirror_scenery(rct_track_td6 * td6)
|
|||
}
|
||||
}
|
||||
|
||||
rct_scenery_entry * scenery_entry = (rct_scenery_entry *) object_entry_groups[entry_type].chunks[entry_index];
|
||||
rct_scenery_entry * scenery_entry = (rct_scenery_entry *)object_entry_get_chunk(entry_type, entry_index);
|
||||
switch (entry_type)
|
||||
{
|
||||
case OBJECT_TYPE_LARGE_SCENERY:
|
||||
|
|
|
@ -276,7 +276,7 @@ static void track_design_save_push_tile_element_desc(rct_object_entry *entry, si
|
|||
static void track_design_save_add_scenery(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.scenery.type;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SMALL_SCENERY].entries[entryType];
|
||||
rct_object_entry *entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->type & 3;
|
||||
|
@ -296,7 +296,7 @@ static void track_design_save_add_large_scenery(sint32 x, sint32 y, rct_tile_ele
|
|||
sint32 direction, sequence;
|
||||
|
||||
sint32 entryType = scenery_large_get_type(tileElement);
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_LARGE_SCENERY].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_LARGE_SCENERY, entryType);
|
||||
sceneryTiles = get_large_scenery_entry(entryType)->large_scenery.tiles;
|
||||
|
||||
z = tileElement->base_height;
|
||||
|
@ -336,7 +336,7 @@ static void track_design_save_add_large_scenery(sint32 x, sint32 y, rct_tile_ele
|
|||
static void track_design_save_add_wall(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.wall.type;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_WALLS].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_WALLS, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->type & 3;
|
||||
|
@ -352,7 +352,7 @@ static void track_design_save_add_wall(sint32 x, sint32 y, rct_tile_element *til
|
|||
static void track_design_save_add_footpath(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.path.type >> 4;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_PATHS].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_PATHS, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->properties.path.edges & FOOTPATH_PROPERTIES_EDGES_EDGES_MASK;
|
||||
|
@ -457,7 +457,7 @@ static void track_design_save_pop_tile_element_desc(rct_object_entry *entry, sin
|
|||
static void track_design_save_remove_scenery(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.scenery.type;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SMALL_SCENERY].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->type & 3;
|
||||
|
@ -477,7 +477,7 @@ static void track_design_save_remove_large_scenery(sint32 x, sint32 y, rct_tile_
|
|||
sint32 direction, sequence;
|
||||
|
||||
sint32 entryType = scenery_large_get_type(tileElement);
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_LARGE_SCENERY].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_LARGE_SCENERY, entryType);
|
||||
sceneryTiles = get_large_scenery_entry(entryType)->large_scenery.tiles;
|
||||
|
||||
z = tileElement->base_height;
|
||||
|
@ -517,7 +517,7 @@ static void track_design_save_remove_large_scenery(sint32 x, sint32 y, rct_tile_
|
|||
static void track_design_save_remove_wall(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.wall.type;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_WALLS].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_WALLS, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->type & 3;
|
||||
|
@ -533,7 +533,7 @@ static void track_design_save_remove_wall(sint32 x, sint32 y, rct_tile_element *
|
|||
static void track_design_save_remove_footpath(sint32 x, sint32 y, rct_tile_element *tileElement)
|
||||
{
|
||||
sint32 entryType = tileElement->properties.path.type >> 4;
|
||||
rct_object_entry *entry = (rct_object_entry*)&object_entry_groups[OBJECT_TYPE_PATHS].entries[entryType];
|
||||
auto entry = (rct_object_entry *)object_entry_get_entry(OBJECT_TYPE_PATHS, entryType);
|
||||
|
||||
uint8 flags = 0;
|
||||
flags |= tileElement->properties.path.edges & FOOTPATH_PROPERTIES_EDGES_EDGES_MASK;
|
||||
|
@ -718,7 +718,7 @@ static rct_track_td6 *track_design_save_to_td6(uint8 rideIndex)
|
|||
rct_track_td6 *td6 = (rct_track_td6 *)calloc(1, sizeof(rct_track_td6));
|
||||
Ride *ride = get_ride(rideIndex);
|
||||
td6->type = ride->type;
|
||||
rct_object_entry_extended *object = &object_entry_groups[OBJECT_TYPE_RIDE].entries[ride->subtype];
|
||||
auto object = object_entry_get_entry(OBJECT_TYPE_RIDE, ride->subtype);
|
||||
|
||||
// Note we are only copying rct_object_entry in size and
|
||||
// not the extended as we don't need the chunk size.
|
||||
|
|
|
@ -134,7 +134,7 @@ void scenario_begin()
|
|||
}
|
||||
}
|
||||
else {
|
||||
rct_stex_entry* stex = g_stexEntries[0];
|
||||
auto stex = (rct_stex_entry *)object_entry_get_chunk(OBJECT_TYPE_SCENARIO_TEXT, 0);
|
||||
if (stex != nullptr) {
|
||||
char *buffer = gCommonStringFormatBuffer;
|
||||
|
||||
|
@ -332,7 +332,7 @@ static void scenario_week_update()
|
|||
ride_check_all_reachable();
|
||||
ride_update_favourited_stat();
|
||||
|
||||
rct_water_type* water_type = (rct_water_type*)object_entry_groups[OBJECT_TYPE_WATER].chunks[0];
|
||||
auto water_type = (rct_water_type *)object_entry_get_chunk(OBJECT_TYPE_WATER, 0);
|
||||
|
||||
if (month <= MONTH_APRIL && water_type != nullptr && water_type->flags & WATER_FLAGS_ALLOW_DUCKS) {
|
||||
// 100 attempts at finding some water to create a few ducks at
|
||||
|
@ -643,13 +643,13 @@ bool scenario_prepare_for_save()
|
|||
{
|
||||
gS6Info.entry.flags = 255;
|
||||
|
||||
rct_stex_entry* stex = g_stexEntries[0];
|
||||
auto stex = (rct_stex_entry *)object_entry_get_chunk(OBJECT_TYPE_SCENARIO_TEXT, 0);
|
||||
if (stex != nullptr) {
|
||||
char buffer[256];
|
||||
format_string(buffer, 256, stex->scenario_name, nullptr);
|
||||
safe_strcpy(gS6Info.name, buffer, sizeof(gS6Info.name));
|
||||
|
||||
memcpy(&gS6Info.entry, &object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0], sizeof(rct_object_entry));
|
||||
memcpy(&gS6Info.entry, object_entry_get_entry(OBJECT_TYPE_SCENARIO_TEXT, 0), sizeof(rct_object_entry));
|
||||
}
|
||||
|
||||
if (gS6Info.name[0] == 0)
|
||||
|
|
|
@ -84,8 +84,6 @@ typedef struct rct_stex_entry {
|
|||
} rct_stex_entry;
|
||||
assert_struct_size(rct_stex_entry, 7);
|
||||
|
||||
#define g_stexEntries ((rct_stex_entry**)object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].chunks)
|
||||
|
||||
// This will be useful for backwards compatibility
|
||||
typedef struct rct_s6_data {
|
||||
// SC6[0]
|
||||
|
|
|
@ -270,7 +270,7 @@ static void mapgen_place_trees()
|
|||
for (sint32 i = 0; i < object_entry_group_counts[OBJECT_TYPE_SMALL_SCENERY]; i++)
|
||||
{
|
||||
rct_scenery_entry * sceneryEntry = get_small_scenery_entry(i);
|
||||
rct_object_entry_extended * entry = &object_entry_groups[OBJECT_TYPE_SMALL_SCENERY].entries[i];
|
||||
rct_object_entry_extended * entry = object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, i);
|
||||
|
||||
if (sceneryEntry == nullptr)
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue