void VMeshPaintingComponent::MarkOwnerBoundingBoxDirty()
{
  if (g_bComponentsThroughUI)
    return;

  VisStaticMeshInstance_cl *pMesh = (VisStaticMeshInstance_cl *)GetOwner();
  if (pMesh==NULL)
    return;
  m_CurrentBBox = pMesh->GetBoundingBox();
  VEditableTerrain::AddDirtyVegetationRangeAllTerrains(m_CurrentBBox);
}
void VMeshPaintingComponent::OnOwnerTransformationChanged()
{
  VisStaticMeshInstance_cl *pMesh = (VisStaticMeshInstance_cl *)GetOwner();
  if (pMesh==NULL)
    return;

  // old and new location is dirty
  hkvAlignedBBox newBBox = pMesh->GetBoundingBox();
  if (newBBox!=m_CurrentBBox)
  {
    if (newBBox.isValid())
      VEditableTerrain::AddDirtyVegetationRangeAllTerrains(newBBox);
    if (m_CurrentBBox.isValid())
      VEditableTerrain::AddDirtyVegetationRangeAllTerrains(m_CurrentBBox);
    m_CurrentBBox = newBBox;
    VEditableTerrain::ForceUpdateDecorationReceiverList();
  }

}
Exemplo n.º 3
0
bool MeshLoader::Load(const VSceneListEntry& entry)
{
  Helper::SetupScene(entry);

  // load vmesh
  VisStaticMesh_cl* pRes = VisStaticMesh_cl::GetResourceManager().LoadStaticMeshFile(entry.sScenePath);
  if (pRes == NULL) 
    return false;
  
  // force loading of .colmesh file if it exists
  if (pRes->GetCollisionMesh(true)) 
    hkvLog::Info("Loaded collision mesh");
  else
    hkvLog::Info("No collision mesh loaded");

  // get a instance
  hkvMat4 mTransform;
  VisStaticMeshInstance_cl *pInst = pRes->CreateInstance(mTransform);

  // create the visibility zone
  const hkvAlignedBBox& bbox = pInst->GetBoundingBox();
  int iZones = Vision::GetSceneManager()->GetNumVisibilityZones();
  VisVisibilityZone_cl* pVisZone;
  if (iZones > 0)
  {
    pVisZone = Vision::GetSceneManager()->GetVisibilityZone(0);
  } 
  else
  {
    pVisZone = new VisVisibilityZone_cl(bbox);
    Vision::GetSceneManager()->AddVisibilityZone(pVisZone);
  }

  // add submeshes to vis zone
  for (int i = 0; i < pInst->GetSubmeshInstanceCount(); ++i)
  {
    pVisZone->AddStaticGeometryInstance(pInst->GetSubmeshInstance(i));
  }

  Helper::LookAtBox(bbox);
  return true;
}