diff --git a/apps/opencs/view/render/cell.cpp b/apps/opencs/view/render/cell.cpp index e703c8a9dc..a53a2939f3 100644 --- a/apps/opencs/view/render/cell.cpp +++ b/apps/opencs/view/render/cell.cpp @@ -315,7 +315,6 @@ float CSVRender::Cell::getTerrainHeightAt(const Ogre::Vector3 &pos) const // FIXME: // - updating indicies -// - collision mask // - add pathgrid point above an object // - adding edges // - save to document & signals diff --git a/apps/opencs/view/render/mousestate.cpp b/apps/opencs/view/render/mousestate.cpp index bceae716cf..ee77768908 100644 --- a/apps/opencs/view/render/mousestate.cpp +++ b/apps/opencs/view/render/mousestate.cpp @@ -285,6 +285,10 @@ namespace CSVRender if(result.first != "") { // FIXME: terrain editing goes here + std::cout << "result default/edit release: " << result.first << std::endl; + std::cout << " hit pos "+ QString::number(result.second.x).toStdString() + + ", " + QString::number(result.second.y).toStdString() + + ", " + QString::number(result.second.z).toStdString() << std::endl; } break; } @@ -456,6 +460,7 @@ namespace CSVRender return std::make_pair("", Ogre::Vector3()); } + // NOTE: also returns pathgrids std::pair MouseState::objectUnderCursor(const int mouseX, const int mouseY) { if(!getViewport()) @@ -473,8 +478,9 @@ namespace CSVRender { uint32_t visibilityMask = getViewport()->getVisibilityMask(); bool ignoreObjects = !(visibilityMask & (uint32_t)CSVRender::Element_Reference); + bool ignorePathgrid = !(visibilityMask & (uint32_t)CSVRender::Element_Pathgrid); - if(!ignoreObjects && mSceneManager->hasSceneNode(result.first)) + if((!ignoreObjects || !ignorePathgrid) && mSceneManager->hasSceneNode(result.first)) { return result; } diff --git a/apps/opencs/view/world/physicssystem.cpp b/apps/opencs/view/world/physicssystem.cpp index 13b29ba5a5..788e42c55e 100644 --- a/apps/opencs/view/world/physicssystem.cpp +++ b/apps/opencs/view/world/physicssystem.cpp @@ -243,14 +243,29 @@ namespace CSVWorld uint32_t visibilityMask = camera->getViewport()->getVisibilityMask(); bool ignoreHeightMap = !(visibilityMask & (uint32_t)CSVRender::Element_Terrain); bool ignoreObjects = !(visibilityMask & (uint32_t)CSVRender::Element_Reference); + bool ignorePathgrid = !(visibilityMask & (uint32_t)CSVRender::Element_Pathgrid); - Ogre::Vector3 norm; // not used - std::pair result = - mEngine->rayTest(_from, _to, !ignoreObjects, ignoreHeightMap, &norm); + std::pair result = std::make_pair("", -1); + short mask = OEngine::Physic::CollisionType_Raycasting; + std::vector > objects = mEngine->rayTest2(_from, _to, mask); + + for (std::vector >::iterator it = objects.begin(); + it != objects.end(); ++it) + { + if(ignorePathgrid && QString((*it).second.c_str()).contains(QRegExp("^Pathgrid"))) + continue; + else if(ignoreObjects && QString((*it).second.c_str()).contains(QRegExp("^ref#"))) + continue; + else if(ignoreHeightMap && QString((*it).second.c_str()).contains(QRegExp("^Height"))) + continue; + + result = std::make_pair((*it).second, (*it).first); + break; + } // result.first is the object's referenceId if(result.first == "") - return std::make_pair("", Ogre::Vector3(0,0,0)); + return std::make_pair("", Ogre::Vector3()); else { // FIXME: maybe below logic belongs in the caller, i.e. terrainUnderCursor or