DAVA::AABBox3 EntityGroup::GetCommonBbox() const { DAVA::AABBox3 ret; for(size_t i = 0; i <entities.size(); ++i) { ret.AddAABBox(GetBbox(i)); } return ret; }
DAVA::AABBox3 SceneSelectionSystem::CalcAABox(DAVA::Entity *entity) const { DAVA::AABBox3 ret; if(NULL != entity) { // we will get selection bbox from collision system ret = collisionSystem->GetBoundingBox(entity); if(ret.IsEmpty()) { for (DAVA::int32 i = 0; i < entity->GetChildrenCount(); i++) { ret.AddAABBox(collisionSystem->GetBoundingBox(entity->GetChild(i))); } } } return ret; }
DAVA::Vector3 EntityGroup::GetCommonZeroPos() const { DAVA::Vector3 ret; if(entities.size() == 1) { ret = GetZeroPos(0); } else if(entities.size() > 0) { DAVA::AABBox3 tmp; for(size_t i = 0; i < entities.size(); ++i) { tmp.AddPoint(entities[i].entity->GetWorldTransform().GetTranslationVector()); } ret = tmp.GetCenter(); } return ret; }
DAVA::AABBox3 SceneSelectionSystem::GetSelectionAABox(DAVA::Entity *entity, const DAVA::Matrix4 &transform) const { DAVA::AABBox3 ret = DAVA::AABBox3(DAVA::Vector3(0, 0, 0), 0); if(NULL != entity) { // we will get selection bbox from collision system DAVA::AABBox3 entityBox = collisionSystem->GetBoundingBox(entity); // add childs boxes into entity box for (DAVA::int32 i = 0; i < entity->GetChildrenCount(); i++) { DAVA::Entity *childEntity = entity->GetChild(i); DAVA::AABBox3 childBox = GetSelectionAABox(childEntity, childEntity->GetLocalTransform()); if(entityBox.IsEmpty()) { entityBox = childBox; } else { if(!childBox.IsEmpty()) { entityBox.AddAABBox(childBox); } } } // we should return box with specified transformation if(!entityBox.IsEmpty()) { entityBox.GetTransformedBox(transform, ret); } } return ret; }