MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / deselectObjectInternal

Function deselectObjectInternal

src/OpenLoco/src/Objects/ObjectIndex.cpp:776–818  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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)

Callers 1

Calls 4

setErrorTextFunction · 0.85
enumValueFunction · 0.85
getTypeMethod · 0.45

Tested by

no test coverage detected