mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix #6294: Refactor Editor::SelectedObjects
This commit is contained in:
parent
66aa25da81
commit
3f8556c85a
|
@ -180,10 +180,10 @@ static sint32 research_item_is_always_researched(rct_research_item *researchItem
|
|||
*/
|
||||
static void research_rides_setup(){
|
||||
// Reset all objects to not required
|
||||
for (uint8 object_type = OBJECT_TYPE_RIDE; object_type < 11; object_type++){
|
||||
for (uint8 object_type = OBJECT_TYPE_RIDE; object_type < OBJECT_TYPE_COUNT; object_type++){
|
||||
uint8* in_use = Editor::SelectedObjects[object_type];
|
||||
for (uint8 num_objects = object_entry_group_counts[object_type]; num_objects != 0; num_objects--){
|
||||
*in_use++ = 0;
|
||||
*in_use++ = OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@ static void research_rides_setup(){
|
|||
for (uint16 rideIndex = 0; rideIndex < 255; rideIndex++){
|
||||
Ride * ride = get_ride(rideIndex);
|
||||
if (ride->type == RIDE_TYPE_NULL)continue;
|
||||
Editor::SelectedObjects[OBJECT_TYPE_RIDE][ride->subtype] |= 1;
|
||||
Editor::SelectedObjects[OBJECT_TYPE_RIDE][ride->subtype] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
}
|
||||
|
||||
for (rct_research_item* research = gResearchItems; research->entryIndex != RESEARCHED_ITEMS_END; research++)
|
||||
|
@ -221,7 +221,7 @@ static void research_rides_setup(){
|
|||
continue;
|
||||
|
||||
// If master ride not in use
|
||||
if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][rideType] & (1 << 0)))
|
||||
if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][rideType] & OBJECT_SELECTION_FLAG_SELECTED))
|
||||
continue;
|
||||
|
||||
for (uint8 j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++)
|
||||
|
@ -242,7 +242,7 @@ static void research_rides_setup(){
|
|||
|
||||
if (!master_found){
|
||||
// If not in use
|
||||
if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][object_index] & (1 << 0))) {
|
||||
if (!(Editor::SelectedObjects[OBJECT_TYPE_RIDE][object_index] & OBJECT_SELECTION_FLAG_SELECTED)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ namespace Editor
|
|||
static uint8 _editorSelectedWaters[MAX_WATER_OBJECTS];
|
||||
static uint8 _editorSelectedStexs[MAX_SCENARIO_TEXT_OBJECTS];
|
||||
|
||||
uint8 * SelectedObjects[OBJECT_ENTRY_GROUP_COUNT] =
|
||||
uint8 * SelectedObjects[OBJECT_TYPE_COUNT] =
|
||||
{
|
||||
_editorSelectedRides,
|
||||
_editorSelectedSmallScenery,
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
namespace Editor
|
||||
{
|
||||
extern uint8 * SelectedObjects[OBJECT_ENTRY_GROUP_COUNT];
|
||||
extern uint8 * SelectedObjects[OBJECT_TYPE_COUNT];
|
||||
|
||||
void Load();
|
||||
void ConvertSaveToScenario();
|
||||
|
|
|
@ -32,7 +32,9 @@ typedef enum
|
|||
OBJECT_TYPE_SCENERY_GROUP,
|
||||
OBJECT_TYPE_PARK_ENTRANCE,
|
||||
OBJECT_TYPE_WATER,
|
||||
OBJECT_TYPE_SCENARIO_TEXT
|
||||
OBJECT_TYPE_SCENARIO_TEXT,
|
||||
|
||||
OBJECT_TYPE_COUNT
|
||||
} OBJECT_TYPE;
|
||||
|
||||
typedef enum
|
||||
|
@ -47,6 +49,8 @@ typedef enum
|
|||
OBJECT_SELECTION_FLAG_8 = (1 << 7),
|
||||
} OBJECT_SELECTION_FLAGS;
|
||||
|
||||
#define OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED 0
|
||||
|
||||
typedef enum
|
||||
{
|
||||
OBJECT_SOURCE_CUSTOM,
|
||||
|
@ -55,7 +59,6 @@ typedef enum
|
|||
OBJECT_SOURCE_RCT2 = 8
|
||||
} OBJECT_SOURCE_GAME;
|
||||
|
||||
#define OBJECT_ENTRY_GROUP_COUNT 11
|
||||
#define OBJECT_ENTRY_COUNT 721
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
|
|
@ -162,7 +162,7 @@ sint32 find_object_in_entry_group(const rct_object_entry* entry, uint8* entry_ty
|
|||
void get_type_entry_index(size_t index, uint8 * outObjectType, uint8 * outEntryIndex)
|
||||
{
|
||||
uint8 objectType = OBJECT_TYPE_RIDE;
|
||||
for (size_t i = 0; i < OBJECT_ENTRY_GROUP_COUNT; i++) {
|
||||
for (size_t i = 0; i < OBJECT_TYPE_COUNT; i++) {
|
||||
size_t groupCount = object_entry_group_counts[i];
|
||||
if (index >= groupCount) {
|
||||
index -= groupCount;
|
||||
|
|
|
@ -280,8 +280,8 @@ static sint32 _listSortType = RIDE_SORT_TYPE;
|
|||
static bool _listSortDescending = false;
|
||||
static void * _loadedObject = nullptr;
|
||||
static uint8 * _objectSelectionFlags = nullptr;
|
||||
static sint32 _numSelectedObjectsForType[11];
|
||||
static sint32 _numAvailableObjectsForType[11];
|
||||
static sint32 _numSelectedObjectsForType[OBJECT_TYPE_COUNT];
|
||||
static sint32 _numAvailableObjectsForType[OBJECT_TYPE_COUNT];
|
||||
static bool _maxObjectsWasHit;
|
||||
|
||||
static void visible_list_dispose()
|
||||
|
@ -502,16 +502,16 @@ static void setup_track_designer_objects()
|
|||
*/
|
||||
static void setup_in_use_selection_flags()
|
||||
{
|
||||
for (uint8 object_type = 0; object_type < 11; object_type++){
|
||||
for (uint8 object_type = 0; object_type < OBJECT_TYPE_COUNT; object_type++){
|
||||
for (uint16 i = 0; i < object_entry_group_counts[object_type]; i++){
|
||||
Editor::SelectedObjects[object_type][i] = 0;
|
||||
Editor::SelectedObjects[object_type][i] = OBJECT_SELECTION_NOT_SELECTED_OR_REQUIRED;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8 object_type = 0; object_type < 11; object_type++){
|
||||
for (uint8 object_type = 0; object_type < OBJECT_TYPE_COUNT; object_type++){
|
||||
for (uint16 i = 0; i < object_entry_group_counts[object_type]; i++){
|
||||
if (object_entry_groups[object_type].chunks[i] != nullptr) {
|
||||
Editor::SelectedObjects[object_type][i] |= (1 << 1);
|
||||
Editor::SelectedObjects[object_type][i] |= OBJECT_SELECTION_FLAG_2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -531,43 +531,43 @@ static void setup_in_use_selection_flags()
|
|||
type = iter.element->properties.path.type;
|
||||
type >>= 4;
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_PATHS]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
|
||||
if (footpath_element_has_path_scenery(iter.element)) {
|
||||
uint8 path_additions = footpath_element_get_path_scenery_index(iter.element);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATH_BITS][path_additions] |= 1;
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATH_BITS][path_additions] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
}
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_SMALL_SCENERY:
|
||||
type = iter.element->properties.scenery.type;
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_SMALL_SCENERY]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_SMALL_SCENERY][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_SMALL_SCENERY][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_ENTRANCE:
|
||||
if (iter.element->properties.entrance.type != ENTRANCE_TYPE_PARK_ENTRANCE)
|
||||
break;
|
||||
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PARK_ENTRANCE][0] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PARK_ENTRANCE][0] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
|
||||
type = iter.element->properties.entrance.path_type;
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_PATHS]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_PATHS][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_WALL:
|
||||
type = iter.element->properties.wall.type;
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_WALLS]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_WALLS][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_WALLS][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_LARGE_SCENERY:
|
||||
type = scenery_large_get_type(iter.element);
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_LARGE_SCENERY]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_LARGE_SCENERY][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_LARGE_SCENERY][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
break;
|
||||
case TILE_ELEMENT_TYPE_BANNER:
|
||||
banner = &gBanners[iter.element->properties.banner.index];
|
||||
type = banner->type;
|
||||
assert(type < object_entry_group_counts[OBJECT_TYPE_BANNERS]);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_BANNERS][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_BANNERS][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
break;
|
||||
}
|
||||
} while (tile_element_iterator_next(&iter));
|
||||
|
@ -576,7 +576,7 @@ static void setup_in_use_selection_flags()
|
|||
Ride* ride = get_ride(ride_index);
|
||||
if (ride->type != RIDE_TYPE_NULL) {
|
||||
uint8 type = ride->subtype;
|
||||
Editor::SelectedObjects[OBJECT_TYPE_RIDE][type] |= (1 << 0);
|
||||
Editor::SelectedObjects[OBJECT_TYPE_RIDE][type] |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -589,12 +589,12 @@ static void setup_in_use_selection_flags()
|
|||
|
||||
uint8 entryType, entryIndex;
|
||||
if (find_object_in_entry_group(&item->ObjectEntry, &entryType, &entryIndex)) {
|
||||
if (Editor::SelectedObjects[entryType][entryIndex] & (1 << 0)) {
|
||||
if (Editor::SelectedObjects[entryType][entryIndex] & OBJECT_SELECTION_FLAG_SELECTED) {
|
||||
*selectionFlags |=
|
||||
OBJECT_SELECTION_FLAG_IN_USE |
|
||||
OBJECT_SELECTION_FLAG_SELECTED;
|
||||
}
|
||||
if (Editor::SelectedObjects[entryType][entryIndex] & (1 << 1)) {
|
||||
if (Editor::SelectedObjects[entryType][entryIndex] & OBJECT_SELECTION_FLAG_2) {
|
||||
*selectionFlags |= OBJECT_SELECTION_FLAG_SELECTED;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue