| 774 | } |
| 775 | |
| 776 | static bool deselectObjectInternal(SelectObjectModes mode, const ObjectHeader& objHeader, ObjectIndexSelection& selection, ObjectIndexId index, const ObjectIndexEntry& entry) |
| 777 | { |
| 778 | // Object already deselected |
| 779 | if ((selection.objectFlags[index] & SelectedObjectsFlags::selected) == SelectedObjectsFlags::none) |
| 780 | { |
| 781 | return true; |
| 782 | } |
| 783 | |
| 784 | // Can't deselect in use objects (placed on map) |
| 785 | if ((selection.objectFlags[index] & SelectedObjectsFlags::inUse) != SelectedObjectsFlags::none) |
| 786 | { |
| 787 | GameCommands::setErrorText(StringIds::this_object_is_currently_in_use); |
| 788 | return false; |
| 789 | } |
| 790 | |
| 791 | // Can't deselect objects required by others |
| 792 | if ((selection.objectFlags[index] & SelectedObjectsFlags::requiredByAnother) != SelectedObjectsFlags::none) |
| 793 | { |
| 794 | GameCommands::setErrorText(StringIds::this_object_is_required_by_another_object); |
| 795 | return false; |
| 796 | } |
| 797 | |
| 798 | // Can't deselect always required objects |
| 799 | // Note: Not used in Locomotion (RCT2 only) |
| 800 | if ((selection.objectFlags[index] & SelectedObjectsFlags::alwaysRequired) != SelectedObjectsFlags::none) |
| 801 | { |
| 802 | GameCommands::setErrorText(StringIds::this_object_is_always_required); |
| 803 | return false; |
| 804 | } |
| 805 | |
| 806 | for (const auto& header : entry._alsoLoadObjects) |
| 807 | { |
| 808 | if ((mode & SelectObjectModes::selectAlsoLoads) != SelectObjectModes::none) |
| 809 | { |
| 810 | selectObjectFromIndexInternal(mode, true, header, selection); |
| 811 | } |
| 812 | } |
| 813 | |
| 814 | selection.selectionMetaData.numImages -= entry._displayData.numImages; |
| 815 | selection.selectionMetaData.numSelectedObjects[enumValue(objHeader.getType())]--; |
| 816 | selection.objectFlags[index] &= ~SelectedObjectsFlags::selected; |
| 817 | return true; |
| 818 | } |
| 819 | |
| 820 | // 0x00473D1D |
| 821 | static bool selectObjectFromIndexInternal(SelectObjectModes mode, bool isRecursed, const ObjectHeader& objHeader, ObjectIndexSelection& selection) |
no test coverage detected