| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- #include "core/ConfigVar.h"
- #include "core/DebugDraw.h"
- #include "core/Logger.h"
- #include "core/Walkmesh.h"
- #include "map/QGearsWalkmeshFile.h"
- ConfigVar cv_debug_walkmesh("debug_walkmesh", "Draw walkmesh and walkmesh debug info", "false");
- Walkmesh::Walkmesh()
- {
- }
- Walkmesh::~Walkmesh()
- {
- }
- void
- Walkmesh::UpdateDebug()
- {
- if(cv_debug_walkmesh.GetB() == true)
- {
- DEBUG_DRAW.SetScreenSpace(true);
- DEBUG_DRAW.SetTextAlignment(DEBUG_DRAW.CENTER);
- for(const auto &triangle : m_Triangles)
- {
- if(triangle.access_side[0] == -1)
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 0, 0, 1));
- }
- else
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 1));
- }
- DEBUG_DRAW.Line3d(triangle.a, triangle.b);
- if(triangle.access_side[1] == -1)
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 0, 0, 1));
- }
- else
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 1));
- }
- DEBUG_DRAW.Line3d(triangle.b, triangle.c);
- if(triangle.access_side[2] == -1)
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 0, 0, 1));
- }
- else
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 1));
- }
- DEBUG_DRAW.Line3d(triangle.c, triangle.a);
- /*
- if(m_Triangles[i].locked == false)
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 0.5));
- }
- else
- {
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 0, 0, 0.5));
- }
- */
- //DEBUG_DRAW.Triangle3d(m_Triangles[i].a, m_Triangles[i].b, m_Triangles[i].c);
- DEBUG_DRAW.SetColour(Ogre::ColourValue(1, 1, 1, 1));
- DEBUG_DRAW.SetFadeDistance(40, 50);
- Ogre::Vector3 triangle_pos = (triangle.a + triangle.b + triangle.c) / 3;
- }
- }
- }
- void
- Walkmesh::Clear()
- {
- m_Triangles.clear();
- }
- void
- Walkmesh::AddTriangle(const WalkmeshTriangle& triangle)
- {
- m_Triangles.push_back(triangle);
- }
- int
- Walkmesh::GetAccessSide(unsigned int triangle_id, unsigned char side) const
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return -1;
- }
- if(side >= 3)
- {
- LOG_ERROR("Side greater than 2. Side indexed from 0 to 2.");
- return -1;
- }
- return m_Triangles[triangle_id].access_side[side];
- }
- const Ogre::Vector3&
- Walkmesh::GetA(unsigned int triangle_id) const
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return Ogre::Vector3::ZERO;
- }
- return m_Triangles[triangle_id].a;
- }
- const Ogre::Vector3&
- Walkmesh::GetB(unsigned int triangle_id) const
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return Ogre::Vector3::ZERO;
- }
- return m_Triangles[triangle_id].b;
- }
- const Ogre::Vector3&
- Walkmesh::GetC(unsigned int triangle_id) const
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return Ogre::Vector3::ZERO;
- }
- return m_Triangles[triangle_id].c;
- }
- int
- Walkmesh::GetNumberOfTriangles() const
- {
- return m_Triangles.size();
- }
- void
- Walkmesh::LockWalkmesh(unsigned int triangle_id, bool lock)
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return;
- }
- m_Triangles[triangle_id].locked = lock;
- }
- bool
- Walkmesh::IsLocked(unsigned int triangle_id) const
- {
- if(triangle_id >= m_Triangles.size())
- {
- LOG_ERROR("Triangle_id greater than number of triangles in walkmesh or less than zero.");
- return false;
- }
- return m_Triangles[triangle_id].locked;
- }
- void Walkmesh::load(const QGears::WalkmeshFilePtr &walkmesh)
- {
- for(const auto &triangle : walkmesh->getTriangles())
- {
- AddTriangle(triangle);
- }
- }
|