Implemented object unload.

Refactored calls to the function. No need to pass the object type.
This commit is contained in:
Duncan Frost 2015-06-26 17:45:38 +01:00
parent 7527a74d7d
commit ab7e1da84e
5 changed files with 19 additions and 9 deletions

View File

@ -151,7 +151,7 @@ void editor_convert_save_to_scenario()
rct_stex_entry* stex = g_stexEntries[0];
if ((int)stex != 0xFFFFFFFF) {
object_unload(0, &object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
object_unload((rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
reset_loaded_objects();
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);
@ -501,7 +501,7 @@ static int editor_read_s6(const char *path)
rct_stex_entry* stex = g_stexEntries[0];
if ((int)stex != 0xFFFFFFFF) {
object_unload(0, &object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
object_unload((rct_object_entry*)&object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].entries[0]);
reset_loaded_objects();
format_string(s6Info->details, STR_NO_DETAILS_YET, NULL);

View File

@ -333,9 +333,19 @@ int object_load_packed(FILE *file)
*
* rct2: 0x006A9CAF
*/
void object_unload(int groupIndex, rct_object_entry_extended *entry)
void object_unload(rct_object_entry *entry)
{
RCT2_CALLPROC_X(0x006A9CAF, 0, groupIndex, 0, 0, 0, 0, (int)entry);
uint8 object_type, object_index;
if (!find_object_in_entry_group(entry, &object_type, &object_index)){
return;
}
uint8* chunk = object_entry_groups[object_type].chunks[object_index];
object_paint(object_type, 1, 0, 0, 0, (int)chunk, 0, 0);
rct2_free(chunk);
object_entry_groups[object_type].chunks[object_index] = (char*)-1;
}
int object_entry_compare(const rct_object_entry *a, const rct_object_entry *b)

View File

@ -101,7 +101,7 @@ void object_unload_all();
int check_object_entry(rct_object_entry *entry);
int object_load(int groupIndex, rct_object_entry *entry, int* chunk_size);
int object_load_file(int groupIndex, const rct_object_entry *entry, int* chunkSize, const rct_object_entry *installedObject);
void object_unload(int groupIndex, rct_object_entry_extended *entry);
void object_unload(rct_object_entry *entry);
int object_get_scenario_text(rct_object_entry *entry);
void object_free_scenario_text();
int object_get_length(rct_object_entry *entry);

View File

@ -576,7 +576,7 @@ void object_unload_all()
for (i = 0; i < OBJECT_ENTRY_GROUP_COUNT; i++)
for (j = 0; j < object_entry_group_counts[i]; j++)
if (object_entry_groups[i].chunks[j] != (uint8*)0xFFFFFFFF)
object_unload(j, &object_entry_groups[i].entries[j]);
object_unload((rct_object_entry*)&object_entry_groups[i].entries[j]);
reset_loaded_objects();
}
@ -727,7 +727,7 @@ static uint32 install_object_entry(rct_object_entry* entry, rct_object_entry* in
log_error("Incorrect number of vanilla RCT2 objects.");
RCT2_GLOBAL(RCT2_ADDRESS_ORIGINAL_RCT2_OBJECT_COUNT, uint32)--;
RCT2_GLOBAL(RCT2_ADDRESS_OBJECT_LIST_NO_ITEMS, uint32)--;
object_unload(objectType, (rct_object_entry_extended*)entry);
object_unload(entry);
return 0;
}
}
@ -788,7 +788,7 @@ static uint32 install_object_entry(rct_object_entry* entry, rct_object_entry* in
uint32 size_of_object = installed_entry_pointer - (uint8*)installed_entry;
object_unload(objectType, (rct_object_entry_extended*)entry);
object_unload(entry);
return size_of_object;
}

View File

@ -608,7 +608,7 @@ void unload_unselected_objects(){
for (int i = RCT2_GLOBAL(RCT2_ADDRESS_OBJECT_LIST_NO_ITEMS, uint32); i > 0; --i){
if (!(*selection_flags & OBJECT_SELECTION_FLAG_SELECTED)){
remove_selected_objects_from_research(installedObject);
object_unload(0, (rct_object_entry_extended*)installedObject);
object_unload(installedObject);
}
selection_flags++;
installedObject = object_get_next(installedObject);