24#include <G3D/g3dmath.h>
75 double sinVal = std::sin(rotation);
76 double cosVal = std::cos(rotation);
81 float rotX = float(boxOrigin.
GetPositionX() + BoxDistX * cosVal - BoxDistY * sinVal);
82 float rotY = float(boxOrigin.
GetPositionY() + BoxDistY * cosVal + BoxDistX * sinVal);
88 if ((std::fabs(dx) > length) ||
89 (std::fabs(dy) > width) ||
90 (std::fabs(dz) > height))
99 bool isValidPositionZ = isDoubleVertical ? std::abs(verticalDelta) <= height : 0 <= verticalDelta && verticalDelta <= height;
101 return isValidPositionZ &&
IsInDist2d(cylinderOrigin, radius);
110 bool locatedInPolygon =
false;
112 for (std::size_t vertex = 0; vertex < vertices.size(); ++vertex)
114 std::size_t nextVertex;
117 if (vertex == (vertices.size() - 1))
125 nextVertex = vertex + 1;
128 float vertX_i = polygonOrigin.
GetPositionX() + vertices[vertex].GetPositionX();
129 float vertY_i = polygonOrigin.
GetPositionY() + vertices[vertex].GetPositionY();
130 float vertX_j = polygonOrigin.
GetPositionX() + vertices[nextVertex].GetPositionX();
131 float vertY_j = polygonOrigin.
GetPositionY() + vertices[nextVertex].GetPositionY();
134 bool belowLowY = vertY_i > testY;
136 bool belowHighY = vertY_j > testY;
149 bool withinYsEdges = belowLowY != belowHighY;
154 float slopeOfLine = (vertX_j - vertX_i) / (vertY_j - vertY_i);
157 float pointOnLine = (slopeOfLine * (testY - vertY_i)) + vertX_i;
160 bool isLeftToLine = testX < pointOnLine;
165 locatedInPolygon = !locatedInPolygon;
170 return locatedInPolygon;
184 if (angle >
float(
M_PI))
185 angle -= 2.0f * float(
M_PI);
187 float lborder = -1 * (arc / border);
188 float rborder = (arc / border);
189 return ((angle >= lborder) && (angle <= rborder));
212 return -std::fmod(-o, 2.0f *
static_cast<float>(
M_PI)) + 2.0f *
static_cast<float>(
M_PI);
214 return std::fmod(o, 2.0f *
static_cast<float>(
M_PI));
271 buf <<
int32(packed);
279 streamer.
Pos->
Relocate(
float((packed << 21) >> 21) * 0.25f,
float((packed << 10) >> 21) * 0.25f,
float(packed >> 22) * 0.25f);
283template <
typename FormatContext>
287 position.GetPositionX(), position.GetPositionY(), position.GetPositionZ(), position.GetOrientation());
290template <
typename FormatContext>
297template <
typename FormatContext>
301 position.Pos.GetPositionX(), position.Pos.GetPositionY());
304template <
typename FormatContext>
308 position.Pos.GetPositionX(), position.Pos.GetPositionY(), position.Pos.GetPositionZ());
DB2Storage< MapEntry > sMapStore("Map.db2", &MapLoadInfo::Instance)
template TC_NETWORK_API fmt::appender Trinity::Net::Impl::AddressFormatter::format< fmt::format_context >(boost::asio::ip::address_v4 const &, fmt::format_context &) const
ByteBuffer & operator>>(ByteBuffer &buf, Position::Streamer< Position::XY > const &streamer)
ByteBuffer & operator<<(ByteBuffer &buf, Position::ConstStreamer< Position::XY > const &streamer)
std::string GetDebugInfo() const
bool IsValidMapCoord(float c)
OutputIt StringFormatTo(OutputIt out, FormatString< Args... > fmt, Args &&... args) noexcept
std::string StringFormat(FormatString< Args... > fmt, Args &&... args) noexcept
Default TC string format function.
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
bool IsWithinVerticalCylinder(Position const &cylinderOrigin, float radius, float height, bool isDoubleVertical=false) const
float GetExactDist2d(const float x, const float y) const
float GetRelativeAngle(float x, float y) const
constexpr bool IsInDist2d(float x, float y, float dist) const
std::string ToString() const
static float NormalizeOrientation(float o)
Position GetPositionWithOffset(Position const &offset) const
Position GetPositionOffsetTo(Position const &endPos) const
bool HasInLine(Position const *pos, float objSize, float width) const
bool HasInArc(float arcangle, Position const *pos, float border=2.0f) const
bool IsInPolygon2D(Position const &polygonOrigin, std::span< Position const > vertices) const
bool IsPositionValid() const
bool operator==(Position const &a) const
constexpr void Relocate(float x, float y)
void RelocateOffset(Position const &offset)
bool IsWithinBox(Position const &boxOrigin, float length, float width, float height) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const