mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-14 06:40:40 +00:00
Visibility mask working correctly.
This commit is contained in:
parent
a5a76cadca
commit
895739d6bb
@ -315,7 +315,6 @@ float CSVRender::Cell::getTerrainHeightAt(const Ogre::Vector3 &pos) const
|
|||||||
|
|
||||||
// FIXME:
|
// FIXME:
|
||||||
// - updating indicies
|
// - updating indicies
|
||||||
// - collision mask
|
|
||||||
// - add pathgrid point above an object
|
// - add pathgrid point above an object
|
||||||
// - adding edges
|
// - adding edges
|
||||||
// - save to document & signals
|
// - save to document & signals
|
||||||
|
@ -285,6 +285,10 @@ namespace CSVRender
|
|||||||
if(result.first != "")
|
if(result.first != "")
|
||||||
{
|
{
|
||||||
// FIXME: terrain editing goes here
|
// 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;
|
break;
|
||||||
}
|
}
|
||||||
@ -456,6 +460,7 @@ namespace CSVRender
|
|||||||
return std::make_pair("", Ogre::Vector3());
|
return std::make_pair("", Ogre::Vector3());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: also returns pathgrids
|
||||||
std::pair<std::string, Ogre::Vector3> MouseState::objectUnderCursor(const int mouseX, const int mouseY)
|
std::pair<std::string, Ogre::Vector3> MouseState::objectUnderCursor(const int mouseX, const int mouseY)
|
||||||
{
|
{
|
||||||
if(!getViewport())
|
if(!getViewport())
|
||||||
@ -473,8 +478,9 @@ namespace CSVRender
|
|||||||
{
|
{
|
||||||
uint32_t visibilityMask = getViewport()->getVisibilityMask();
|
uint32_t visibilityMask = getViewport()->getVisibilityMask();
|
||||||
bool ignoreObjects = !(visibilityMask & (uint32_t)CSVRender::Element_Reference);
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -243,14 +243,29 @@ namespace CSVWorld
|
|||||||
uint32_t visibilityMask = camera->getViewport()->getVisibilityMask();
|
uint32_t visibilityMask = camera->getViewport()->getVisibilityMask();
|
||||||
bool ignoreHeightMap = !(visibilityMask & (uint32_t)CSVRender::Element_Terrain);
|
bool ignoreHeightMap = !(visibilityMask & (uint32_t)CSVRender::Element_Terrain);
|
||||||
bool ignoreObjects = !(visibilityMask & (uint32_t)CSVRender::Element_Reference);
|
bool ignoreObjects = !(visibilityMask & (uint32_t)CSVRender::Element_Reference);
|
||||||
|
bool ignorePathgrid = !(visibilityMask & (uint32_t)CSVRender::Element_Pathgrid);
|
||||||
|
|
||||||
Ogre::Vector3 norm; // not used
|
std::pair<std::string, float> result = std::make_pair("", -1);
|
||||||
std::pair<std::string, float> result =
|
short mask = OEngine::Physic::CollisionType_Raycasting;
|
||||||
mEngine->rayTest(_from, _to, !ignoreObjects, ignoreHeightMap, &norm);
|
std::vector<std::pair<float, std::string> > objects = mEngine->rayTest2(_from, _to, mask);
|
||||||
|
|
||||||
|
for (std::vector<std::pair<float, std::string> >::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
|
// result.first is the object's referenceId
|
||||||
if(result.first == "")
|
if(result.first == "")
|
||||||
return std::make_pair("", Ogre::Vector3(0,0,0));
|
return std::make_pair("", Ogre::Vector3());
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// FIXME: maybe below logic belongs in the caller, i.e. terrainUnderCursor or
|
// FIXME: maybe below logic belongs in the caller, i.e. terrainUnderCursor or
|
||||||
|
Loading…
x
Reference in New Issue
Block a user