Remove most usages of object_entry_groups

This commit is contained in:
Ted John 2018-02-11 18:56:09 +00:00
parent d905dde070
commit 4d8fe051e8
18 changed files with 65 additions and 62 deletions

View File

@ -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];

View File

@ -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);

View File

@ -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 {

View File

@ -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

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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];
}

View File

@ -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)
{

View File

@ -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;

View File

@ -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';
}

View File

@ -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:

View File

@ -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.

View File

@ -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)

View File

@ -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]

View File

@ -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;