StructureBounds getStructureBounds(FEATURE_STATS const *stats, Vector2i pos) { Vector2i size = getFeatureStatsSize(stats); Vector2i map = map_coord(pos) - size/2; return StructureBounds(map, size); }
StructureBounds getStructureBounds(FEATURE const *object) { Vector2i size = getFeatureStatsSize(object->psStats); Vector2i map = map_coord(removeZ(object->pos)) - size/2; return StructureBounds(map, size); }
StructureBounds getStructureBounds(BASE_STATS const *stats, Vector2i pos, uint16_t direction) { if (StatIsStructure(stats)) { return getStructureBounds(static_cast<STRUCTURE_STATS const *>(stats), pos, direction); } else if (StatIsFeature(stats)) { return getStructureBounds(static_cast<FEATURE_STATS const *>(stats), pos); } return StructureBounds(map_coord(pos), Vector2i(1, 1)); // Default to a 1×1 tile. }
StructureBounds getStructureBounds(BASE_OBJECT const *object) { STRUCTURE const *psStructure = castStructure(object); FEATURE const *psFeature = castFeature(object); if (psStructure != nullptr) { return getStructureBounds(psStructure); } else if (psFeature != nullptr) { return getStructureBounds(psFeature); } return StructureBounds(Vector2i(32767, 32767), Vector2i(-65535, -65535)); // Default to an invalid area. }