bool StructureManager::isInStructureFootprint(StructureObject* structure, float positionX, float positionY, int extraFootprintMargin){ if(structure == NULL) return false; if(structure->getObjectTemplate() == NULL) return false; Reference<SharedStructureObjectTemplate*> serverTemplate = dynamic_cast<SharedStructureObjectTemplate*>(structure->getObjectTemplate()); float placingFootprintLength0, placingFootprintWidth0, placingFootprintLength1, placingFootprintWidth1; StructureManager::instance()->getStructureFootprint(serverTemplate, structure->getDirectionAngle(), placingFootprintLength0, placingFootprintWidth0, placingFootprintLength1, placingFootprintWidth1); //info("object: " + obj->getObjectNameStringIdName() + " obj x = " + String::valueOf(obj->getPositionX()) + " y= " + String::valueOf(obj->getPositionY()),true); float x0 = structure->getPositionX() + placingFootprintWidth0 + extraFootprintMargin; float y0 = structure->getPositionY() + placingFootprintLength0 + extraFootprintMargin; float x1 = structure->getPositionX() + placingFootprintWidth1 + extraFootprintMargin; float y1 = structure->getPositionY() + placingFootprintLength1 + extraFootprintMargin; BoundaryRectangle structureFootprint(x0, y0, x1, y1); return structureFootprint.containsPoint(positionX, positionY); }
bool StructureManager::isInStructureFootprint(StructureObject* structure, float positionX, float positionY, int extraFootprintMargin){ if(structure == NULL) return false; if(structure->getObjectTemplate() == NULL) return false; Reference<SharedStructureObjectTemplate*> serverTemplate = dynamic_cast<SharedStructureObjectTemplate*>(structure->getObjectTemplate()); float placingFootprintLength0, placingFootprintWidth0, placingFootprintLength1, placingFootprintWidth1; if (getStructureFootprint(serverTemplate, structure->getDirectionAngle(), placingFootprintLength0, placingFootprintWidth0, placingFootprintLength1, placingFootprintWidth1) != 0) return false; float x0 = structure->getPositionX() + placingFootprintWidth0 + (placingFootprintWidth0 >= 0 ? extraFootprintMargin : (extraFootprintMargin * -1)); float y0 = structure->getPositionY() + placingFootprintLength0 + (placingFootprintLength0 >= 0 ? extraFootprintMargin : (extraFootprintMargin * -1)); float x1 = structure->getPositionX() + placingFootprintWidth1 + (placingFootprintWidth1 >= 0 ? extraFootprintMargin : (extraFootprintMargin * -1)); float y1 = structure->getPositionY() + placingFootprintLength1 + (placingFootprintLength1 >= 0 ? extraFootprintMargin : (extraFootprintMargin * -1)); BoundaryRectangle structureFootprint(x0, y0, x1, y1); return structureFootprint.containsPoint(positionX, positionY); }