62 if (coord < 1 || coord > 3)
65 for (i = 0; i < varray.size(); i++)
68 tempnum = varray[i].x;
70 tempnum = varray[i].y;
74 tempnum = varray[i].z;
76 tempnum = -varray[i].z;
100 if (cutwalls ==
false && cutfloors ==
false)
105 std::swap(start.x, end.x);
107 std::swap(start.y, end.y);
109 std::swap(start.z, end.z);
111 bool polycheck =
false;
113 if (reset_check ==
true)
115 if (checkwallnumber == 1)
120 if (checkwallnumber == 2)
129 for (
int i = 0; i < polycount; i++)
141 for (
size_t j = 0; j < polygon->
geometry.size(); j++)
144 if (polygon->
geometry[j].size() == 0)
153 Vector2 extentsx, extentsy, extentsz;
154 Ogre::AxisAlignedBox bounds (start, end);
155 Ogre::AxisAlignedBox polybounds;
156 bool polycheck2 =
false;
159 for (
size_t k = 0; k < polygon->
geometry[j].size(); k++)
163 polybounds.merge(vertex);
174 if (bounds.intersects(polybounds) ==
true)
181 if (extentsy.x != extentsy.y)
183 if (cutwalls ==
true)
186 if (std::abs(extentsx.x - extentsx.y) > std::abs(extentsz.x - extentsz.y))
271 else if (cutfloors ==
true)
316 if (polycheck2 ==
true)
323 for (
size_t k = 0; k <
temppoly.size(); k++)
331 for (
size_t k = 0; k <
temppoly2.size(); k++)
339 for (
size_t k = 0; k <
temppoly3.size(); k++)
347 for (
size_t k = 0; k <
temppoly4.size(); k++)
361 for (
size_t k = 0; k < polygon->
geometry[j].size(); k++)
370 if (polycheck ==
true)
375 std::string name = polygon->
GetName();
405 if (checknumber > 0 && checknumber < 3)
412 if (checknumber == 2)
418 extent =
GetExtents(polygon, 1).x + mesh_position.x;
421 extent =
GetExtents(polygon, 3).x + mesh_position.z;
432 extent =
GetExtents(polygon, 1).y + mesh_position.x;
435 extent =
GetExtents(polygon, 3).y + mesh_position.z;
452 for (
size_t i = 0; i < polygon.size(); i++)
457 int largest_normal = 0;
459 if (std::abs(normal.y) >= std::abs(normal.x) && std::abs(normal.y) >= std::abs(normal.z))
461 else if (std::abs(normal.z) > std::abs(normal.x))
464 if (largest_normal == 0)
472 if (largest_normal == 1)
480 if (largest_normal == 2)
497 Real x = StartPoint.x + distance * cos(newangle);
498 Real y = -StartPoint.y + distance * sin(newangle);
510 if (flip_normal ==
true)
515 return Plane(normal, det);
547 bool direction = std::abs(extents_x.x - extents_x.y) > std::abs(extents_z.x - extents_z.y);
549 sbs->
DrawWalls(
false,
true,
false,
false,
false,
false);
550 if (direction ==
true)
551 sbs->
AddWallMain(wall,
"DoorwayLeft", texture, 0, extents_x.x, extents_z.x, extents_x.x, extents_z.y, extents_y.y - extents_y.x, extents_y.y - extents_y.x, extents_y.x, extents_y.x, tw, th,
true);
553 sbs->
AddWallMain(wall,
"DoorwayLeft", texture, 0, extents_x.x, extents_z.x, extents_x.y, extents_z.x, extents_y.y - extents_y.x, extents_y.y - extents_y.x, extents_y.x, extents_y.x, tw, th,
true);
556 sbs->
DrawWalls(
true,
false,
false,
false,
false,
false);
557 if (direction ==
true)
558 sbs->
AddWallMain(wall,
"DoorwayRight", texture, 0, extents_x.y, extents_z.x, extents_x.y, extents_z.y, extents_y.y - extents_y.x, extents_y.y - extents_y.x, extents_y.x, extents_y.x, tw, th,
true);
560 sbs->
AddWallMain(wall,
"DoorwayRight", texture, 0, extents_x.x, extents_z.y, extents_x.y, extents_z.y, extents_y.y - extents_y.x, extents_y.y - extents_y.x, extents_y.x, extents_y.x, tw, th,
true);
562 sbs->
AddFloorMain(wall,
"DoorwayTop", texture, 0, extents_x.x, extents_z.x, extents_x.y, extents_z.y, extents_y.y, extents_y.y,
false,
false, tw, th,
true);
Wall * CreateWallObject(const std::string &name)
const std::string & GetName()
virtual Vector3 GetPosition(bool relative=false)
void GetTextureMapping(Matrix3 &t_matrix, Vector3 &t_vector)
bool AddWallMain(Wall *wallobject, const std::string &name, const std::string &texture, Real thickness, Real x1, Real z1, Real x2, Real z2, Real height_in1, Real height_in2, Real altitude1, Real altitude2, Real tw, Real th, bool autosize)
void ResetWalls(bool ToDefaults=false)
Real ToLocal(Real remote_value)
Real ToRemote(Real local_value)
void DrawWalls(bool MainN, bool MainP, bool SideN, bool SideP, bool Top, bool Bottom)
bool AddFloorMain(Wall *wallobject, const std::string &name, const std::string &texture, Real thickness, Real x1, Real z1, Real x2, Real z2, Real altitude1, Real altitude2, bool reverse_axis, bool texture_direction, Real tw, Real th, bool autosize, bool legacy_behavior=false)
Vector2 GetExtents(PolyArray &varray, int coord, bool flip_z=false)
void SplitWithPlane(int axis, PolyArray &orig, PolyArray &poly1, PolyArray &poly2, Real value)
Vector3 GetPolygonDirection(PolyArray &polygon)
Vector2 GetEndPoint(const Vector2 &StartPoint, Real angle, Real distance)
Wall * AddDoorwayWalls(MeshObject *mesh, const std::string &wallname, const std::string &texture, Real tw, Real th)
Plane ComputePlane(PolyArray &vertices, bool flip_normal=true)
void Cut(Wall *wall, Vector3 start, Vector3 end, bool cutwalls, bool cutfloors, int checkwallnumber=0, bool reset_check=true)
Vector3 ComputeNormal(PolyArray &vertices, Real &D)
void GetDoorwayExtents(MeshObject *mesh, int checknumber, PolyArray &polygon)
void DeletePolygon(int index, bool recreate_colliders)
Polygon * GetPolygon(int index)
Polygon * AddPolygonSet(const std::string &name, const std::string &material, PolygonSet &vertices, Matrix3 &tex_matrix, Vector3 &tex_vector)
std::vector< Vector3 > PolyArray
Real DegreesToRadians(Real degrees)