12 instance.Initialize();
13 if (instance.IsValid())
43 vector sizes =
Vector(shapeDataArray[0][0],shapeDataArray[0][1],shapeDataArray[0][2]);
44 vector angle =
Vector(shapeDataArray[1][0],shapeDataArray[1][1],shapeDataArray[1][2]);
45 vector targetPoint =
Vector(shapeDataArray[2][0],shapeDataArray[2][1],shapeDataArray[2][2]);
93 Debug.
Log(
"No valid coordinates in 'PRABoxes' or 'PRAPolygons' for area: " +
areaName,
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
97 float xMin,zMin =
float.MAX;
98 float xMax,zMax =
float.MIN;
102 if (boxFloatsData.Count() != 3)
104 Debug.
Log(
"Invalid box defined in " +
areaName +
". Box needs to have sizes, rotation, and position defined!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
110 boxVectors = boxFloatsData[0];
111 if (boxVectors.Count() != 3)
113 Debug.
Log(
"Invalid box defined in " +
areaName +
". Box size needs to be in an XYZ format!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
118 boxVectors = boxFloatsData[1];
119 if (boxVectors.Count() != 3)
121 Debug.
Log(
"Invalid box defined in " +
areaName +
". Box rotation needs to be in an XYZ format!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
126 boxVectors = boxFloatsData[2];
127 if (boxVectors.Count() != 3)
129 Debug.
Log(
"Invalid box defined in " +
areaName +
". Box position needs to be in an XYZ format!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
134 PRAShapeBoxData dta =
new PRAShapeBoxData(boxFloatsData);
139 xMin =
Math.
Min(xMin,dta.m_Mins[0]);
140 zMin =
Math.
Min(zMin,dta.m_Mins[2]);
141 xMax =
Math.
Max(xMax,dta.m_Maxs[0]);
142 zMax =
Math.
Max(zMax,dta.m_Maxs[2]);
148 if (polygonData.Count() < 3)
150 Debug.
Log(
"Invalid polygon defined in " +
areaName +
". At least 3 points necessary!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
156 if (polygonCoords.Count() != 2)
158 Debug.
Log(
"Invalid polygon defined in " +
areaName +
". Polygon coordinates need to be in a XZ format!",
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
162 xMin =
Math.
Min(xMin,polygonCoords[0]);
163 zMin =
Math.
Min(zMin,polygonCoords[1]);
164 xMax =
Math.
Max(xMax,polygonCoords[0]);
165 zMax =
Math.
Max(zMax,polygonCoords[1]);
178 Debug.
Log(
"Undefined safe positions for area: " +
areaName,
"n/a",
"n/a",
"",
"PlayerRestrictedAreaInstance");
212 vector closestPos = targetPos;
213 float smallestDist =
float.MAX;
219 if (dist < smallestDist)
class PRAShapeDataBase m_Mins
ref array< ref PlayerRestrictedAreaInstance > m_Areas
ref array< ref PlayerRestrictedAreaInstance > m_ValidatedAreas
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
void PRAShapeDataBase(array< ref array< float > > shapeDataArray)
void InitPRAShapeData(array< ref array< float > > shapeDataArray)
ref array< ref array< ref array< float > > > PRABoxes
ref array< ref array< float > > safePositions2D
vector GetClosestSafePos3D(vector targetPos)
ref array< ref PRAShapeBoxData > m_PRABoxDataTranslated
bool TranslateSafePositions()
ref array< vector > m_TranslatedSafePositions3D
ref array< ref array< ref array< float > > > PRAPolygons
3D, not used directly!
bool ValidatePlayerRestrictedAreaPositions()
vector GetRandomSafePos3D(vector targetPos)
ref array< ref array< float > > safePositions3D
ref array< vector > m_RandomizedSafePositions3D
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float DistanceSq(vector v1, vector v2)
Returns the square distance between tips of two 3D vectors.
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto void YawPitchRollMatrix(vector ang, out vector mat[3])
Creates rotation matrix from angles.
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float Min(float x, float y)
Returns smaller of two given values.