临时提交

This commit is contained in:
DESKTOP-5RP3AKU\Jisol
2024-12-03 19:54:47 +08:00
parent e77dd9e841
commit 81c2bc83ff
145 changed files with 2922 additions and 30412 deletions
+1
View File
@@ -125,6 +125,7 @@
<None Include="Assets\Packages\TouchSocket.Http.2.0.16\lib\netstandard2.1\TouchSocket.Http.xml" />
<None Include="Assets\Packages\System.Text.Encodings.Web.6.0.0\useSharedDesignerContext.txt" />
<None Include="Assets\Resources\Samples\map1.json" />
<None Include="Assets\Resources\Samples\Battle\Map\NavMesh\map1.json" />
<None Include="Assets\Packages\System.Text.Encodings.Web.6.0.0\lib\netstandard2.0\System.Text.Encodings.Web.xml" />
<None Include="Assets\Samples\Cinemachine\2.10.1\Cinemachine Example Scenes\Scenes\FadeOutNearbyObjects\FadeOut.shader" />
<None Include="Assets\Scripts\BehaviorTreeSlayer\Examples\6 break running node\SampleIdleConfig.txt" />
@@ -0,0 +1,307 @@
/*
* @FileName: EditorCreateLUT.cs
* @Date: 2024-04-20 20:06:14
* @LastEditTime: 2024-04-22 22:15:46
* @Description: 生成三角函数速查表代码
*/
#if UNITY_EDITOR
using System;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
namespace JNGame.Math
{
/// <summary>
/// 编辑模式下生成三角函数速查表代码
/// </summary>
public static class EditorCreateLUT
{
#region Unit Test
//[MenuItem("LockstepEngine/Math/TestAllLut")]
private static void TestAllLut()
{
TestSqrt(10000);
TestSqrt(65535);
TestSqrt(65536);
TestSqrt(0xffffffff);
TestSqrt(1000002L * 1000001L);
TestLutATan();
TestATan2();
TestLutASin();
TestLutACos();
TestLutSin();
TestLutCos();
}
private static void TestSqrt(ulong t)
{
var val = LMath.Sqrt(t);
UnityEngine.Debug.Log($"sqrt({t}) = {val}");
return;
}
//[MenuItem("LockstepEngine/Math/TestLutATan")]
private static void TestLutATan()
{
TestLut((i) => i, (i) => Mathf.Atan(i), (i) => LMath.Atan(i.ToLFloat()));
}
private static void TestLutASin()
{
TestLut((i) => i * 0.001f, (p) => Mathf.Asin(p), (p) => LMath.Asin(p.ToLFloat()));
}
private static void TestLutACos()
{
TestLut((i) => i * 0.001f, (p) => Mathf.Acos(p), (p) => LMath.Acos(p.ToLFloat()));
}
private static void TestLutSin()
{
TestLut((i) => i * 0.001f * Mathf.PI * 2 - Mathf.PI, (p) => Mathf.Sin(p), (p) => LMath.Sin(p.ToLFloat()));
}
private static void TestLutCos()
{
TestLut((i) => i * 0.001f * Mathf.PI * 2 - Mathf.PI, (p) => Mathf.Cos(p), (p) => LMath.Cos(p.ToLFloat()));
}
private static void TestLut(Func<int, float> funcPar, Func<float, float> rawFunc, Func<float, LFloat> lFunc)
{
StringBuilder sb = new StringBuilder();
int testSize1 = 1000;
for (int i = 1; i < testSize1; i++)
{
var par = funcPar(i);
var rawVal = rawFunc(par);
var myVal = lFunc(par).ToFloat();
var diff = rawVal - myVal;
if (diff > 0.01f)
{
sb.AppendLine($"i:{i} diff:{diff}");
}
}
UnityEngine.Debug.Log(sb.ToString());
}
//[MenuItem("LockstepEngine/Math/TestATan2")]
private static void TestATan2()
{
StringBuilder sb = new StringBuilder();
var v1 = Mathf.Atan2(1, 1);
var v2 = Mathf.Atan2(1, -1);
var v3 = Mathf.Atan2(-1, -1);
var v4 = Mathf.Atan2(-1, 1);
int testSize = 100;
for (int y = -testSize; y < testSize; y++)
{
for (int x = -testSize; x < testSize; x++)
{
var rawVal = Mathf.Atan2(y, x);
var myVal = LMath.Atan2(y, x); // new LFloat(true, LMath._Atan2(y, x)).ToFloat();
var diff = rawVal - myVal;
if (diff > 0.01f)
{
sb.AppendLine($"y:{y} x:{x} diff:{diff}");
}
}
}
UnityEngine.Debug.Log(sb.ToString());
}
#endregion
#region Code Generator
/// <summary>
/// 代码生成路径
/// </summary>
private static readonly string s_LUTDir = Application.dataPath + "/HotScripts/JNGame/Root/Math/LUT/";
/// <summary>
/// 生成三角函数速查表代码文件
/// </summary>
[MenuItem("LockstepEngine/Math/CreateAllLUT")]
static void CreateAllLUT()
{
CreateLutAtan2();
CreateLUTASinCos();
}
private static readonly string s_FilePrefixStr = @"
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
";
private static void CreateLutAtan2()
{
var fileName = s_LUTDir + "LUTAtan2.cs";
string content = @"
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTAtan2
{
public const int MaxQueryIdx = $MAX_QUERY_IDX;//Abs(y/x)from 1 to MaxQueryIdx
public static int[] _startIdx;
public static int[] _arySize;
public static int[] _tblTbl;
static LUTAtan2()
{
_startIdx = new int[MaxQueryIdx +1]{
$START_IDX
};
_arySize = new int[MaxQueryIdx +1]{
$ARY_SIZE
};
_tblTbl = new int[]{
$ALL_VALUES
};
}
}
}";
const int MaxQueryIdx = 1000;
const int interval = 1000;
// UnityEngine.Debug.LogError("tan Pi/4 = " + Mathf.Tan(Mathf.PI / 4));
// UnityEngine.Debug.LogError("atan 1 = " + Mathf.Atan(1) * Mathf.Rad2Deg);
StringBuilder ssb = new StringBuilder();
StringBuilder aryLne = new StringBuilder();
int sum = 0;
StringBuilder tblSb = new StringBuilder();
StringBuilder startSb = new StringBuilder();
StringBuilder arySizeSb = new StringBuilder();
string sprefix = "\t\t\t\t";
tblSb.Append(sprefix);
startSb.Append(sprefix);
arySizeSb.Append(sprefix);
for (int i = 0; i < MaxQueryIdx; i++)
{
var val = Mathf.Atan(i + 1) * Mathf.Rad2Deg;
var val2 = Mathf.Atan(i + 2) * Mathf.Rad2Deg;
var arryLen = (int)((val2 - val) * interval);
if (arryLen == 0)
{
arryLen = 1;
}
startSb.Append(sum + ", ");
arySizeSb.Append(arryLen + ", ");
for (int j = 0; j < arryLen; j++)
{
var rad = Mathf.Atan(i + 1 + (j * 1.0f / arryLen));
tblSb.Append((int)(rad * LFloat.Precision) + ", ");
sum++;
if (sum % 100 == 0)
{
tblSb.AppendLine();
tblSb.Append(sprefix);
}
}
if (i % 100 == 99)
{
startSb.AppendLine();
arySizeSb.AppendLine();
startSb.Append(sprefix);
arySizeSb.Append(sprefix);
}
}
startSb.Append("" + (sum + 1));
arySizeSb.Append("" + 1);
tblSb.Append("" + (int)(Mathf.PI / 4 * LFloat.Precision));
content = content
.Replace("$MAX_QUERY_IDX", MaxQueryIdx.ToString())
.Replace("$START_IDX", startSb.ToString())
.Replace("$ARY_SIZE", arySizeSb.ToString())
.Replace("$ALL_VALUES", tblSb.ToString());
//save to files
File.WriteAllText(fileName, s_FilePrefixStr + content);
AssetDatabase.Refresh();
return;
}
private static void CreateLUTASinCos()
{
int ACount = 4000;
CreateLUTA("LUTAsin", ACount, (i) =>
Mathf.Asin(Mathf.Clamp(-1.0f + i * 2.0f / ACount, -1f, 1f))
);
CreateLUTA("LUTAcos", ACount, (i) =>
Mathf.Acos(Mathf.Clamp(-1.0f + i * 2.0f / ACount, -1f, 1f))
);
int CCount = 7200;
CreateLUTA("LUTCos", CCount, (i) =>
Mathf.Cos(i * Mathf.PI * 2 / CCount)
);
CreateLUTA("LUTSin", CCount, (i) =>
Mathf.Sin(i * Mathf.PI * 2 / CCount)
);
}
private static void CreateLUTA(string clsName, int nLutAryCount, Func<int, float> itemCallBack)
{
var fileName = s_LUTDir + clsName + ".cs";
string content = @"using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class $CLS_NAME
{
public static readonly int COUNT;
public static readonly int HALF_COUNT;
public static readonly int[] table;
static $CLS_NAME()
{
COUNT = $COUNT_VAL;
HALF_COUNT = COUNT >> 1;
table = new int[]
{
$ALL_VALUES
};
}
}
}";
StringBuilder sb = new StringBuilder();
string prefix = "\t\t\t\t";
sb.Append(prefix);
for (int i = 0; i <= nLutAryCount; i++)
{
int val = (int)(itemCallBack(i) * LFloat.Precision);
sb.Append(val.ToString() + ",");
if (i % 100 == 99)
{
sb.AppendLine();
sb.Append(prefix);
}
}
content = content
.Replace("$CLS_NAME", clsName.ToString())
.Replace("$COUNT_VAL", nLutAryCount.ToString())
.Replace("$ALL_VALUES", sb.ToString());
//save to files
File.WriteAllText(fileName, s_FilePrefixStr + content);
AssetDatabase.Refresh();
}
#endregion
}
}
#endif
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5eb54a96f1904df2a6494a7d56f65aa5
timeCreated: 1732460759
@@ -445,7 +445,7 @@ namespace JNGame.PathFinding
{
GeometryUtil.GetClosestPointOnTriangle(ret.vertexA, ret.vertexB, ret.vertexC, point, ref pointOnTriangle);
// 稍微向三角形方向内部一点,避免严格在边上,三角形落位判断问题
pointOnTriangle = point + (pointOnTriangle - point) * new LFloat(true, 1010000);
pointOnTriangle = point + (pointOnTriangle - point) * new LFloat("", 1010);
}
}
else
@@ -12,7 +12,7 @@ using JNGame.Math;
using UnityEngine;
using UnityEngine.AI;
namespace JNGame.Map.DotRecast
namespace JNGame.Map.DotRecast.Editor
{
public class DotRecastController : MonoBehaviour
{
@@ -12,6 +12,8 @@ namespace JNGame.Map.DotRecast.Util
public MeshData() { }
#if UNITY_EDITOR
public MeshData(UnityEngine.Mesh mesh)
{
vertexCount = mesh.vertexCount;
@@ -23,5 +25,7 @@ namespace JNGame.Map.DotRecast.Util
vertices[i] = new LVector3((LFloat)vertice.x,(LFloat)vertice.y,(LFloat)vertice.z);
}
}
#endif
}
}
@@ -34,7 +34,7 @@ namespace DotRecast.Core.Buffers
if (0 >= source.Length)
return 0;
return source.Sum() / (LFloat)source.Length;
return source.Sum().ToLFloat() / source.Length;
}
private static long Min(this ReadOnlySpan<long> source)
@@ -96,7 +96,7 @@ namespace DotRecast.Core.Buffers
public static LFloat Average(this RcCyclicBuffer<long> source)
{
return Sum(source) / (LFloat)source.Size;
return Sum(source).ToLFloat() / source.Size;
}
public static long Min(this RcCyclicBuffer<long> source)
@@ -657,7 +657,7 @@ namespace DotRecast.Core.Compression
public static long EstimateCompressedSize(long size)
{
long estimatedSize = (long)LMath.Ceiling(size * (LFloat)1.06f);
long estimatedSize = (long)LMath.Ceiling(size * (new LFloat("",1060)));
return LMath.Max(estimatedSize, 66);
}
}
@@ -8,10 +8,10 @@ namespace DotRecast.Core.Numerics
{
private static readonly RcMatrix4x4f _identity = new RcMatrix4x4f
(
(LFloat)1f, (LFloat)0f, (LFloat)0f, (LFloat)0f,
(LFloat)0f, (LFloat)1f, (LFloat)0f, (LFloat)0f,
(LFloat)0f, (LFloat)0f, (LFloat)1f, (LFloat)0f,
(LFloat)0f, (LFloat)0f, (LFloat)0f, (LFloat)1f
LFloat.L1, LFloat.L0, LFloat.L0, LFloat.L0,
LFloat.L0, LFloat.L1, LFloat.L0, LFloat.L0,
LFloat.L0, LFloat.L0, LFloat.L1, LFloat.L0,
LFloat.L0, LFloat.L0, LFloat.L0, LFloat.L1
);
public LFloat M11; // 0
@@ -104,10 +104,10 @@ namespace DotRecast.Core.Numerics
public readonly bool IsIdentity =>
M11.Equals(1f) && M22.Equals(1f) && M33.Equals(1f) && M44.Equals(1f) &&
M12 == 0f && M13 == 0f && M14 == 0f &&
M21 == 0f && M23 == 0f && M24 == 0f &&
M31 == 0f && M32 == 0f && M34 == 0f &&
M41 == 0f && M42 == 0f && M43 == 0f;
M12 == LFloat.L0 && M13 == LFloat.L0 && M14 == LFloat.L0 &&
M21 == LFloat.L0 && M23 == LFloat.L0 && M24 == LFloat.L0 &&
M31 == LFloat.L0 && M32 == LFloat.L0 && M34 == LFloat.L0 &&
M41 == LFloat.L0 && M42 == LFloat.L0 && M43 == LFloat.L0;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static RcMatrix4x4f Mul(ref RcMatrix4x4f left, ref RcMatrix4x4f right)
@@ -182,10 +182,10 @@ namespace DotRecast.Core.Numerics
public static RcMatrix4x4f CreateFromRotate(LFloat a, LFloat x, LFloat y, LFloat z)
{
var matrix = new RcMatrix4x4f();
a = (LFloat)(a * LMath.PI / 180.0); // convert to radians
a = (a * LMath.PI / 180); // convert to radians
LFloat s = LMath.Sin(a);
LFloat c = LMath.Cos(a);
LFloat t = (LFloat)1.0f - c;
LFloat t = LFloat.L1 - c;
LFloat tx = t * x;
LFloat ty = t * y;
@@ -28,11 +28,11 @@ namespace DotRecast.Core.Numerics
public LFloat Y;
public LFloat Z;
public static readonly RcVec3f Zero = new RcVec3f((LFloat)0.0f, (LFloat)0.0f, (LFloat)0.0f);
public static readonly RcVec3f One = new RcVec3f((LFloat)1.0f);
public static readonly RcVec3f UnitX = new RcVec3f((LFloat)1.0f, (LFloat)0.0f, (LFloat)0.0f);
public static readonly RcVec3f UnitY = new RcVec3f((LFloat)0.0f, (LFloat)1.0f, (LFloat)0.0f);
public static readonly RcVec3f UnitZ = new RcVec3f((LFloat)0.0f, (LFloat)0.0f, (LFloat)1.0f);
public static readonly RcVec3f Zero = new RcVec3f(LFloat.L0, LFloat.L0, LFloat.L0);
public static readonly RcVec3f One = new RcVec3f(LFloat.L1);
public static readonly RcVec3f UnitX = new RcVec3f(LFloat.L1, LFloat.L0, LFloat.L0);
public static readonly RcVec3f UnitY = new RcVec3f(LFloat.L0, LFloat.L1, LFloat.L0);
public static readonly RcVec3f UnitZ = new RcVec3f(LFloat.L0, LFloat.L0, LFloat.L1);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public RcVec3f(LFloat x, LFloat y, LFloat z)
@@ -186,7 +186,7 @@ namespace DotRecast.Core.Numerics
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static RcVec3f Lerp(RcVec3f value1, RcVec3f value2, LFloat amount)
{
return (value1 * ((LFloat)1f - amount)) + (value2 * amount);
return (value1 * (LFloat.L1 - amount)) + (value2 * amount);
// return new RcVec3f(
// value1.X + (value2.X - value1.X) * amount,
// value1.Y + (value2.Y - value1.Y) * amount,
@@ -157,7 +157,7 @@ namespace DotRecast.Core.Numerics
LFloat sqMag = RcMath.Sqr(v.X) + RcMath.Sqr(v.Y) + RcMath.Sqr(v.Z);
if (sqMag > Epsilon)
{
LFloat inverseMag = (LFloat)1.0f / LMath.Sqrt(sqMag);
LFloat inverseMag = LFloat.L1 / LMath.Sqrt(sqMag);
return new RcVec3f(
v.X *= inverseMag,
v.Y *= inverseMag,
@@ -200,7 +200,7 @@ namespace DotRecast.Core.Numerics
{
LFloat dx = v2.X - v1.X;
LFloat dz = v2.Z - v1.Z;
return (LFloat)LMath.Sqrt(dx * dx + dz * dz);
return LMath.Sqrt(dx * dx + dz * dz);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -105,7 +105,9 @@ namespace DotRecast.Core
span.Reverse();
}
return (LFloat)BitConverter.ToSingle(span);
// @TODO 临时写死
// return (LFloat)BitConverter.ToSingle(span);
return LFloat.L0;
}
public long GetLong()
@@ -6,7 +6,10 @@ namespace DotRecast.Core
{
public static class RcFrequency
{
public static readonly LFloat Frequency = (LFloat)TimeSpan.TicksPerSecond / Stopwatch.Frequency;
public static long Ticks => unchecked((long)(Stopwatch.GetTimestamp() * Frequency));
//@TODO 临时写死
// public static readonly LFloat Frequency = (LFloat)TimeSpan.TicksPerSecond / Stopwatch.Frequency;
// public static long Ticks => unchecked((long)(Stopwatch.GetTimestamp() * Frequency));
public static readonly LFloat Frequency = LFloat.L1;
public static long Ticks => 1;
}
}
@@ -41,7 +41,7 @@ namespace DotRecast.Core
// Compute denominator d. If d <= 0, segment is parallel to or points
// away from triangle, so exit early
LFloat d = RcVec3f.Dot(qp, norm);
if (d <= 0.0f)
if (d <= LFloat.L0)
{
return false;
}
@@ -51,7 +51,7 @@ namespace DotRecast.Core
// dividing by d until intersection has been found to pierce triangle
RcVec3f ap = RcVec3f.Subtract(sp, a);
t = RcVec3f.Dot(ap, norm);
if (t < 0.0f)
if (t < LFloat.L0)
{
return false;
}
@@ -64,13 +64,13 @@ namespace DotRecast.Core
// Compute barycentric coordinate components and test if within bounds
RcVec3f e = RcVec3f.Cross(qp, ap);
v = RcVec3f.Dot(ac, e);
if (v < 0.0f || v > d)
if (v < LFloat.L0 || v > d)
{
return false;
}
w = -RcVec3f.Dot(ab, e);
if (w < 0.0f || v + w > d)
if (w < LFloat.L0 || v + w > d)
{
return false;
}
@@ -89,7 +89,7 @@ namespace DotRecast.Core
d.X = sq.X - sp.X;
d.Y = sq.Y - sp.Y;
d.Z = sq.Z - sp.Z;
tmin = (LFloat)0.0f;
tmin = LFloat.L0;
tmax = LFloat.MaxValue;
for (int i = 0; i < 3; i++)
@@ -103,7 +103,7 @@ namespace DotRecast.Core
}
else
{
LFloat ood = (LFloat)1.0f / d.Get(i);
LFloat ood = LFloat.L1 / d.Get(i);
LFloat t1 = (amin.Get(i) - sp.Get(i)) * ood;
LFloat t2 = (amax.Get(i) - sp.Get(i)) * ood;
@@ -17,12 +17,12 @@ namespace DotRecast.Core
public LFloat Next()
{
return _random.Range((LFloat)0f,(LFloat)1f);
return _random.Range(LFloat.L0,LFloat.L1);
}
public LFloat NextDouble()
{
return _random.Range((LFloat)0f,(LFloat)1f);
return _random.Range(LFloat.L0,LFloat.L1);
}
public int NextInt32()
@@ -34,8 +34,8 @@ namespace DotRecast.Core
var array_2_8_1 = RcStackArray2<RcStackArray8<LFloat>>.Empty; // 2 * 8 = 16
var array_2_4_1 = RcStackArray2<RcStackArray2<LFloat>>.Empty; // 2 * 2 = 4
LFloat f1 = (LFloat)0.0f; // 1
//LFloat f2 = 0.0f; // my system stack overflow!
LFloat f1 = LFloat.L0; // 1
//LFloat f2 = (LFloat.L0); // my system stack overflow!
}
@@ -150,7 +150,7 @@ namespace DotRecast.Detour.Crowd
public DtCrowd(DtCrowdConfig config, DtNavMesh nav, Func<int, IDtQueryFilter> queryFilterFactory)
{
_config = config;
_agentPlacementHalfExtents = new RcVec3f(config.maxAgentRadius * (LFloat)2.0f, config.maxAgentRadius * (LFloat)1.5f, config.maxAgentRadius * (LFloat)2.0f);
_agentPlacementHalfExtents = new RcVec3f(config.maxAgentRadius * LFloat.L2, config.maxAgentRadius * new LFloat("",1500), config.maxAgentRadius * LFloat.L2);
_obstacleQuery = new DtObstacleAvoidanceQuery(config.maxObstacleAvoidanceCircles, config.maxObstacleAvoidanceSegments);
@@ -877,7 +877,7 @@ namespace DotRecast.Detour.Crowd
// Update the collision boundary after certain distance has been passed or
// if it has become invalid.
LFloat updateThr = ag.option.collisionQueryRange * (LFloat)0.25f;
LFloat updateThr = ag.option.collisionQueryRange * new LFloat("",250);
if (RcVecUtils.Dist2DSqr(ag.npos, ag.boundary.GetCenter()) > RcMath.Sqr(updateThr)
|| !ag.boundary.IsValid(_navQuery, _filters[ag.option.queryFilterType]))
{
@@ -908,7 +908,7 @@ namespace DotRecast.Detour.Crowd
// Check for overlap.
RcVec3f diff = RcVec3f.Subtract(pos, ag.npos);
if (LMath.Abs(diff.Y) >= (height + ag.option.height) / 2.0f)
if (LMath.Abs(diff.Y) >= (height + ag.option.height) / LFloat.L2)
{
continue;
}
@@ -995,7 +995,7 @@ namespace DotRecast.Detour.Crowd
}
// Check
LFloat triggerRadius = ag.option.radius * (LFloat)2.25f;
LFloat triggerRadius = ag.option.radius * new LFloat("",2250);
if (ag.OverOffmeshConnection(triggerRadius))
{
// Prepare to off-mesh connection.
@@ -1009,8 +1009,8 @@ namespace DotRecast.Detour.Crowd
anim.initPos = ag.npos;
anim.polyRef = refs[1];
anim.active = true;
anim.t = (LFloat)0.0f;
anim.tmax = (RcVecUtils.Dist2D(anim.startPos, anim.endPos) / ag.option.maxSpeed) * (LFloat)0.5f;
anim.t = LFloat.L0;
anim.tmax = (RcVecUtils.Dist2D(anim.startPos, anim.endPos) / ag.option.maxSpeed) * LFloat.L0D5;
ag.state = DtCrowdAgentState.DT_CROWDAGENT_STATE_OFFMESH;
ag.corners.Clear();
@@ -1073,7 +1073,7 @@ namespace DotRecast.Detour.Crowd
if ((ag.option.updateFlags & DtCrowdAgentUpdateFlags.DT_CROWD_SEPARATION) != 0)
{
LFloat separationDist = ag.option.collisionQueryRange;
LFloat invSeparationDist = (LFloat)1.0f / separationDist;
LFloat invSeparationDist = LFloat.L1 / separationDist;
LFloat separationWeight = ag.option.separationWeight;
LFloat w = 0;
@@ -1087,7 +1087,9 @@ namespace DotRecast.Detour.Crowd
diff.Y = 0;
LFloat distSqr = diff.LengthSquared();
if (distSqr < (LFloat)0.0001f)
//@TODO 临时解决 这里可能出现闪现
// if (distSqr < (LFloat)0.0001f)
if (distSqr < new LFloat("",1))
{
continue;
}
@@ -1098,16 +1100,18 @@ namespace DotRecast.Detour.Crowd
}
LFloat dist = LMath.Sqrt(distSqr);
LFloat weight = separationWeight * ((LFloat)1.0f - RcMath.Sqr(dist * invSeparationDist));
LFloat weight = separationWeight * (LFloat.L1 - RcMath.Sqr(dist * invSeparationDist));
disp = RcVecUtils.Mad(disp, diff, weight / dist);
w += (LFloat)1.0f;
w += LFloat.L1;
}
if (w > (LFloat)0.0001f)
//@TODO 临时解决 这里可能出现闪现
// if (w > (LFloat)0.0001f)
if (w > new LFloat("",1))
{
// Adjust desired velocity.
dvel = RcVecUtils.Mad(dvel, disp, (LFloat)1.0f / w);
dvel = RcVecUtils.Mad(dvel, disp, LFloat.L1 / w);
// Clamp desired velocity to desired speed.
LFloat speedSqr = dvel.LengthSquared();
LFloat desiredSqr = RcMath.Sqr(ag.desiredSpeed);
@@ -1153,7 +1157,7 @@ namespace DotRecast.Detour.Crowd
RcVec3f[] s = ag.boundary.GetSegment(j);
RcVec3f s3 = s[1];
//RcArrays.Copy(s, 3, s3, 0, 3);
if (DtUtils.TriArea2D(ag.npos, s[0], s3) < 0.0f)
if (DtUtils.TriArea2D(ag.npos, s[0], s3) < LFloat.L0)
{
continue;
}
@@ -1244,7 +1248,9 @@ namespace DotRecast.Detour.Crowd
dist = LMath.Sqrt(dist);
LFloat pen = (ag.option.radius + nei.option.radius) - dist;
if (dist < (LFloat)0.0001f)
//@TODO 临时解决 这里可能出现闪现
// if (dist < (LFloat)0.0001f)
if (dist < new LFloat("",1))
{
// Agents on top of each other, try to choose diverging separation directions.
if (idx0 > idx1)
@@ -1256,21 +1262,23 @@ namespace DotRecast.Detour.Crowd
diff = new RcVec3f(ag.dvel.Z, 0, -ag.dvel.X);
}
pen = (LFloat)0.01f;
pen = (new LFloat("",10));
}
else
{
pen = ((LFloat)1.0f / dist) * (pen * (LFloat)0.5f) * _config.collisionResolveFactor;
pen = (LFloat.L1 / dist) * (pen * LFloat.L0D5) * _config.collisionResolveFactor;
}
ag.disp = RcVecUtils.Mad(ag.disp, diff, pen);
w += (LFloat)1.0f;
w += LFloat.L1;
}
if (w > (LFloat)0.0001f)
//@TODO 临时解决 这里可能出现闪现
// if (w > (LFloat)0.0001f)
if (w > new LFloat("",1))
{
LFloat iw = (LFloat)1.0f / w;
LFloat iw = LFloat.L1 / w;
ag.disp = ag.disp.Scale(iw);
}
}
@@ -1339,11 +1347,11 @@ namespace DotRecast.Detour.Crowd
}
// Update position
LFloat ta = anim.tmax * (LFloat)0.15f;
LFloat ta = anim.tmax * new LFloat("",150);
LFloat tb = anim.tmax;
if (anim.t < ta)
{
LFloat u = Tween(anim.t, (LFloat)0.0f, ta);
LFloat u = Tween(anim.t, LFloat.L0, ta);
ag.npos = RcVec3f.Lerp(anim.initPos, anim.startPos, u);
}
else
@@ -1360,7 +1368,7 @@ namespace DotRecast.Detour.Crowd
private LFloat Tween(LFloat t, LFloat t0, LFloat t1)
{
return LMath.Clamp((t - t0) / (t1 - t0), (LFloat)0.0f, (LFloat)1.0f);
return LMath.Clamp((t - t0) / (t1 - t0), LFloat.L0, LFloat.L1);
}
}
}
@@ -98,7 +98,9 @@ namespace DotRecast.Detour.Crowd
vel = RcVec3f.Add(vel, dv);
// Integrate
if (vel.Length() > (LFloat)0.0001f)
// @TODO 可能会闪现
// if (vel.Length() > (LFloat)0.0001f)
if (vel.Length() > new LFloat("",1))
npos = RcVecUtils.Mad(npos, vel, dt);
else
vel = RcVec3f.Zero;
@@ -152,12 +154,12 @@ namespace DotRecast.Detour.Crowd
LFloat len0 = dir0.Length();
LFloat len1 = dir1.Length();
if (len1 > (LFloat)0.001f)
dir1 = dir1.Scale((LFloat)1.0f / len1);
if (len1 > new LFloat("",1))
dir1 = dir1.Scale(LFloat.L1 / len1);
dir.X = dir0.X - dir1.X * len0 * (LFloat)0.5f;
dir.X = dir0.X - dir1.X * len0 * LFloat.L0D5;
dir.Y = 0;
dir.Z = dir0.Z - dir1.Z * len0 * (LFloat)0.5f;
dir.Z = dir0.Z - dir1.Z * len0 * LFloat.L0D5;
dir = RcVec3f.Normalize(dir);
}
@@ -11,7 +11,7 @@ namespace DotRecast.Detour.Crowd
public bool obstacleAvoidance = true;
public int obstacleAvoidanceType = 3;
public bool separation;
public LFloat separationWeight = (LFloat)2f;
public LFloat separationWeight = LFloat.L2;
public int GetUpdateFlags()
{
@@ -28,11 +28,11 @@ namespace DotRecast.Detour.Crowd
public int pathQueueSize = 32; // Max number of path requests in the queue
public int maxFindPathIterations = 100; // Max number of sliced path finding iterations executed per update (used to handle longer paths and replans)
public int maxTargetFindPathIterations = 20; // Max number of sliced path finding iterations executed per agent to find the initial path to target
public LFloat topologyOptimizationTimeThreshold = (LFloat)0.5f; // Min time between topology optimizations (in seconds)
public LFloat topologyOptimizationTimeThreshold = LFloat.L0D5; // Min time between topology optimizations (in seconds)
public int checkLookAhead = 10; // The number of polygons from the beginning of the corridor to check to ensure path validity
public LFloat targetReplanDelay = (LFloat)1.0f; // Min time between target re-planning (in seconds)
public LFloat targetReplanDelay = LFloat.L1; // Min time between target re-planning (in seconds)
public int maxTopologyOptimizationIterations = 32; // Max number of sliced path finding iterations executed per topology optimization per agent
public LFloat collisionResolveFactor = (LFloat)0.7f;
public LFloat collisionResolveFactor = LFloat.L0D7;
public int maxObstacleAvoidanceCircles = 6; // Max number of neighbour agents to consider in obstacle avoidance processing
public int maxObstacleAvoidanceSegments = 8; // Max number of neighbour segments to consider in obstacle avoidance processing
@@ -65,9 +65,9 @@ namespace DotRecast.Detour.Crowd
}
LFloat penRange = maxPen - minPen;
LFloat s = penRange > (LFloat)0.001f ? ((LFloat)1.0f / penRange) : 1;
LFloat s = penRange > new LFloat("",1) ? (LFloat.L1 / penRange) : 1;
for (int i = 0; i < n; ++i)
arr[i] = LMath.Clamp((arr[i] - minPen) * s, (LFloat)0.0f, (LFloat)1.0f);
arr[i] = LMath.Clamp((arr[i] - minPen) * s, LFloat.L0, LFloat.L1);
}
public void NormalizeSamples()
@@ -30,12 +30,12 @@ namespace DotRecast.Detour.Crowd
/// < adaptive
public DtObstacleAvoidanceParams()
{
velBias = (LFloat)0.4f;
weightDesVel = (LFloat)2.0f;
weightCurVel = (LFloat)0.75f;
weightSide = (LFloat)0.75f;
weightToi = (LFloat)2.5f;
horizTime = (LFloat)2.5f;
velBias = LFloat.L0D4;
weightDesVel = LFloat.L2;
weightCurVel = (new LFloat("",750));
weightSide = (new LFloat("",750));
weightToi = (new LFloat("",2500));
horizTime = (new LFloat("",2500));
gridSize = 33;
adaptiveDivs = 7;
adaptiveRings = 2;
@@ -31,7 +31,7 @@ namespace DotRecast.Detour.Crowd
{
public const int DT_MAX_PATTERN_DIVS = 32; // < Max numver of adaptive divs.
public const int DT_MAX_PATTERN_RINGS = 4;
public LFloat DT_PI = (LFloat)3.14159265f;
public LFloat DT_PI = LMath.PI;
private DtObstacleAvoidanceParams m_params;
private LFloat m_invHorizTime;
@@ -131,7 +131,7 @@ namespace DotRecast.Detour.Crowd
dv = RcVec3f.Subtract(cir.dvel, dvel);
LFloat a = DtUtils.TriArea2D(orig, cir.dp, dv);
if (a < 0.01f)
if (a < LFloat.L0)
{
cir.np.X = -cir.dp.Z;
cir.np.Z = cir.dp.X;
@@ -148,7 +148,7 @@ namespace DotRecast.Detour.Crowd
DtObstacleSegment seg = m_segments[i];
// Precalc if the agent is really close to the segment.
LFloat r = (LFloat)0.01f;
LFloat r = (new LFloat("",10));
var distSqr = DtUtils.DistancePtSegSqr2D(pos, seg.p, seg.q, out var t);
seg.touch = distSqr < RcMath.Sqr(r);
}
@@ -156,7 +156,9 @@ namespace DotRecast.Detour.Crowd
private bool SweepCircleCircle(RcVec3f c0, LFloat r0, RcVec3f v, RcVec3f c1, LFloat r1, out LFloat tmin, out LFloat tmax)
{
LFloat EPS = (LFloat)0.0001f;
// TODO 闪现
// LFloat EPS = (LFloat)0.0001f;
LFloat EPS = LFloat.EPS_1MS;
tmin = 0;
tmax = 0;
@@ -171,10 +173,10 @@ namespace DotRecast.Detour.Crowd
// Overlap, calc time to exit.
LFloat b = v.Dot2D(s);
LFloat d = b * b - a * c;
if (d < 0.0f)
if (d < LFloat.L0)
return false; // no intersection.
a = (LFloat)1.0f / a;
a = LFloat.L1 / a;
LFloat rd = LMath.Sqrt(d);
tmin = (b - rd) * a;
@@ -191,7 +193,7 @@ namespace DotRecast.Detour.Crowd
if (LMath.Abs(d) < 1e-6f)
return false;
d = (LFloat)1.0f / d;
d = LFloat.L1 / d;
t = RcVecUtils.Perp2D(v, w) * d;
if (t < 0 || t > 1)
return false;
@@ -223,7 +225,7 @@ namespace DotRecast.Detour.Crowd
// find the threshold hit time to bail out based on the early out penalty
// (see how the penalty is calculated below to understand)
LFloat minPen = minPenalty - vpen - vcpen;
LFloat tThresold = (m_params.weightToi / minPen - (LFloat)0.1f) * m_params.horizTime;
LFloat tThresold = (m_params.weightToi / minPen - LFloat.L0D1) * m_params.horizTime;
if (tThresold - m_params.horizTime > -LFloat.MinValue)
return minPenalty; // already too much
@@ -242,20 +244,20 @@ namespace DotRecast.Detour.Crowd
vab = RcVec3f.Subtract(vab, cir.vel);
// Side
side += LMath.Clamp(LMath.Min(cir.dp.Dot2D(vab) * (LFloat)0.5f + (LFloat)0.5f, cir.np.Dot2D(vab) * 2), (LFloat)0.0f, (LFloat)1.0f);
side += LMath.Clamp(LMath.Min(cir.dp.Dot2D(vab) * LFloat.L0D5 + LFloat.L0D5, cir.np.Dot2D(vab) * 2), LFloat.L0, LFloat.L1);
nside++;
if (!SweepCircleCircle(pos, rad, vab, cir.p, cir.rad, out var htmin, out var htmax))
continue;
// Handle overlapping obstacles.
if (htmin < 0.0f && htmax > 0.0f)
if (htmin < LFloat.L0 && htmax > LFloat.L0)
{
// Avoid more when overlapped.
htmin = -htmin * (LFloat)0.5f;
htmin = -htmin * LFloat.L0D5;
}
if (htmin >= 0.0f)
if (htmin >= LFloat.L0)
{
// The closest obstacle is somewhere ahead of us, keep track of nearest obstacle.
if (htmin < tmin)
@@ -280,10 +282,10 @@ namespace DotRecast.Detour.Crowd
snorm.X = -sdir.Z;
snorm.Z = sdir.X;
// If the velocity is pointing towards the segment, no collision.
if (snorm.Dot2D(vcand) < 0.0f)
if (snorm.Dot2D(vcand) < LFloat.L0)
continue;
// Else immediate collision.
htmin = (LFloat)0.0f;
htmin = LFloat.L0;
}
else
{
@@ -292,7 +294,7 @@ namespace DotRecast.Detour.Crowd
}
// Avoid less when facing walls.
htmin *= (LFloat)2.0f;
htmin *= LFloat.L2;
// The closest obstacle is somewhere ahead of us, keep track of nearest obstacle.
if (htmin < tmin)
@@ -308,7 +310,7 @@ namespace DotRecast.Detour.Crowd
side /= nside;
LFloat spen = m_params.weightSide * side;
LFloat tpen = m_params.weightToi * ((LFloat)1.0f / ((LFloat)0.1f + tmin * m_invHorizTime));
LFloat tpen = m_params.weightToi * (LFloat.L1 / (LFloat.L0D1 + tmin * m_invHorizTime));
LFloat penalty = vpen + vcpen + spen + tpen;
// Store different penalties for debug viewing
@@ -323,9 +325,9 @@ namespace DotRecast.Detour.Crowd
{
Prepare(pos, dvel);
m_params = option;
m_invHorizTime = (LFloat)1.0f / m_params.horizTime;
m_invHorizTime = LFloat.L1 / m_params.horizTime;
m_vmax = vmax;
m_invVmax = vmax > 0 ? (LFloat)1.0f / vmax : LFloat.MaxValue;
m_invVmax = vmax > 0 ? LFloat.L1 / vmax : LFloat.MaxValue;
nvel = RcVec3f.Zero;
@@ -335,7 +337,7 @@ namespace DotRecast.Detour.Crowd
LFloat cvx = dvel.X * m_params.velBias;
LFloat cvz = dvel.Z * m_params.velBias;
LFloat cs = vmax * 2 * (1 - m_params.velBias) / (m_params.gridSize - 1);
LFloat half = (m_params.gridSize - 1) * cs * (LFloat)0.5f;
LFloat half = (m_params.gridSize - 1) * cs * LFloat.L0D5;
LFloat minPenalty = LFloat.MaxValue;
int ns = 0;
@@ -344,7 +346,7 @@ namespace DotRecast.Detour.Crowd
{
for (int x = 0; x < m_params.gridSize; ++x)
{
RcVec3f vcand = new RcVec3f(cvx + x * cs - half, (LFloat)0f, cvz + y * cs - half);
RcVec3f vcand = new RcVec3f(cvx + x * cs - half, LFloat.L0, cvz + y * cs - half);
if (RcMath.Sqr(vcand.X) + RcMath.Sqr(vcand.Z) > RcMath.Sqr(vmax + cs / 2))
continue;
@@ -368,7 +370,7 @@ namespace DotRecast.Detour.Crowd
LFloat d = LMath.Sqrt(v[0] * v[0] + v[2] * v[2]);
if (d == 0)
return;
d = (LFloat)1.0f / d;
d = LFloat.L1 / d;
v[0] *= d;
v[2] *= d;
}
@@ -393,9 +395,9 @@ namespace DotRecast.Detour.Crowd
{
Prepare(pos, dvel);
m_params = option;
m_invHorizTime = (LFloat)1.0f / m_params.horizTime;
m_invHorizTime = LFloat.L1 / m_params.horizTime;
m_vmax = vmax;
m_invVmax = vmax > 0 ? (LFloat)1.0f / vmax : LFloat.MaxValue;
m_invVmax = vmax > 0 ? LFloat.L1 / vmax : LFloat.MaxValue;
nvel = RcVec3f.Zero;
@@ -412,7 +414,7 @@ namespace DotRecast.Detour.Crowd
int nd = LMath.Clamp(ndivs, 1, DT_MAX_PATTERN_DIVS);
int nr = LMath.Clamp(nrings, 1, DT_MAX_PATTERN_RINGS);
LFloat da = ((LFloat)1.0f / nd) * DT_PI * 2;
LFloat da = (LFloat.L1 / nd) * DT_PI * 2;
LFloat ca = LMath.Cos(da);
LFloat sa = LMath.Sin(da);
@@ -422,7 +424,7 @@ namespace DotRecast.Detour.Crowd
ddir[1] = dvel.Y;
ddir[2] = dvel.Z;
DtNormalize2D(ddir);
RcVec3f rotated = DtRotate2D(ddir, da * (LFloat)0.5f); // rotated by da/2
RcVec3f rotated = DtRotate2D(ddir, da * LFloat.L0D5); // rotated by da/2
ddir[3] = rotated.X;
ddir[4] = rotated.Y;
ddir[5] = rotated.Z;
@@ -434,7 +436,7 @@ namespace DotRecast.Detour.Crowd
for (int j = 0; j < nr; ++j)
{
LFloat r = (LFloat)(nr - j) / (LFloat)nr;
LFloat r = (nr - j) / nr;
pat[npat * 2 + 0] = ddir[(j % 2) * 3] * r;
pat[npat * 2 + 1] = ddir[(j % 2) * 3 + 2] * r;
int last1 = npat * 2;
@@ -464,7 +466,7 @@ namespace DotRecast.Detour.Crowd
}
// Start sampling.
LFloat cr = vmax * ((LFloat)1.0f - m_params.velBias);
LFloat cr = vmax * (LFloat.L1 - m_params.velBias);
RcVec3f res = new RcVec3f(dvel.X * m_params.velBias, 0, dvel.Z * m_params.velBias);
int ns = 0;
for (int k = 0; k < depth; ++k)
@@ -475,8 +477,8 @@ namespace DotRecast.Detour.Crowd
for (int i = 0; i < npat; ++i)
{
RcVec3f vcand = new RcVec3f(res.X + pat[i * 2 + 0] * cr, (LFloat)0f, res.Z + pat[i * 2 + 1] * cr);
if (RcMath.Sqr(vcand.X) + RcMath.Sqr(vcand.Z) > RcMath.Sqr(vmax + (LFloat)0.001f))
RcVec3f vcand = new RcVec3f(res.X + pat[i * 2 + 0] * cr, LFloat.L0, res.Z + pat[i * 2 + 1] * cr);
if (RcMath.Sqr(vcand.X) + RcMath.Sqr(vcand.Z) > RcMath.Sqr(vmax + LFloat.EPS_1MS))
continue;
LFloat penalty = ProcessSample(vcand, cr / 10, pos, rad, vel, dvel, minPenalty, debug);
@@ -490,7 +492,7 @@ namespace DotRecast.Detour.Crowd
res = bvel;
cr *= (LFloat)0.5f;
cr *= LFloat.L0D5;
}
nvel = res;
@@ -136,7 +136,7 @@ namespace DotRecast.Detour.Crowd
/// @return The number of corners returned in the corner buffers. [0 <= value <= @p maxCorners]
public int FindCorners(ref List<DtStraightPath> corners, int maxCorners, DtNavMeshQuery navquery, IDtQueryFilter filter)
{
LFloat MIN_TARGET_DIST = (LFloat)0.01f;
LFloat MIN_TARGET_DIST = (new LFloat("",10));
var result = navquery.FindStraightPath(m_pos, m_target, m_path, m_npath, ref corners, maxCorners, 0);
if (result.Succeeded())
@@ -201,13 +201,13 @@ namespace DotRecast.Detour.Crowd
LFloat dist = RcVecUtils.Dist2D(m_pos, next);
// If too close to the goal, do not try to optimize.
if (dist < 0.01f)
if (dist < LFloat.L0)
{
return;
}
// Overshoot a little. This helps to optimize open fields in tiled meshes.
dist = LMath.Min(dist + (LFloat)0.01f, pathOptimizationRange);
dist = LMath.Min(dist + (new LFloat("",10)), pathOptimizationRange);
// Adjust ray length.
var delta = RcVec3f.Subtract(next, m_pos);
@@ -217,7 +217,7 @@ namespace DotRecast.Detour.Crowd
var status = navquery.Raycast(m_path[0], m_pos, goal, filter, out var t, out var norm, ref res);
if (status.Succeeded())
{
if (res.Count > 1 && t > 0.99f)
if (res.Count > 1 && t > new LFloat("",990))
{
m_npath = DtPathUtils.MergeCorridorStartShortcut(ref m_path, m_npath, m_maxPath, res, res.Count);
}
@@ -35,7 +35,7 @@ namespace DotRecast.Detour.Crowd
public DtProximityGrid(LFloat cellSize)
{
_cellSize = cellSize;
_invCellSize = (LFloat)1.0f / cellSize;
_invCellSize = LFloat.L1 / cellSize;
_items = new Dictionary<long, List<DtCrowdAgent>>();
}
@@ -46,9 +46,9 @@ namespace DotRecast.Detour.Dynamic.Colliders
};
for (int i = 0; i < 8; ++i)
{
LFloat s0 = (i & 1) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s1 = (i & 2) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s2 = (i & 4) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s0 = (i & 1) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s1 = (i & 2) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s2 = (i & 4) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat vx = center.X + s0 * halfEdges[0].X + s1 * halfEdges[1].X + s2 * halfEdges[2].X;
LFloat vy = center.Y + s0 * halfEdges[0].Y + s1 * halfEdges[1].Y + s2 * halfEdges[2].Y;
LFloat vz = center.Z + s0 * halfEdges[0].Z + s1 * halfEdges[1].Z + s2 * halfEdges[2].Z;
@@ -181,7 +181,7 @@ namespace DotRecast.Detour.Dynamic
}
}
hit = (LFloat)0.0f;
hit = LFloat.L0;
return false;
}
}
@@ -74,8 +74,8 @@ namespace DotRecast.Detour.Dynamic.Io
file.regionMergeArea = 6 * file.minRegionArea;
file.vertsPerPoly = 6;
file.buildMeshDetail = true;
file.detailSampleDistance = file.maxEdgeLen * (LFloat)0.5f;
file.detailSampleMaxError = file.maxSimplificationError * (LFloat)0.8f;
file.detailSampleDistance = file.maxEdgeLen * LFloat.L0D5;
file.detailSampleMaxError = file.maxSimplificationError * LFloat.L0D8;
}
file.useTiles = buf.Get() != 0;
@@ -93,9 +93,9 @@ namespace DotRecast.Detour.Dynamic.Io
if (isExportedFromAstar)
{
// bounds are saved as center + size
file.bounds[0] -= (LFloat)0.5f * file.bounds[3];
file.bounds[1] -= (LFloat)0.5f * file.bounds[4];
file.bounds[2] -= (LFloat)0.5f * file.bounds[5];
file.bounds[0] -= LFloat.L0D5 * file.bounds[3];
file.bounds[1] -= LFloat.L0D5 * file.bounds[4];
file.bounds[2] -= LFloat.L0D5 * file.bounds[5];
file.bounds[3] += file.bounds[0];
file.bounds[4] += file.bounds[1];
file.bounds[5] += file.bounds[2];
@@ -30,7 +30,8 @@ namespace DotRecast.Detour.Extras.Jumplink
for (int i = 0; i < nsamples; ++i)
{
LFloat u = i / (LFloat)(nsamples - 1);
// TODO
LFloat u = i.ToLFloat() / (nsamples.ToLFloat() - 1);
GroundSample s = new GroundSample();
seg.gsamples[i] = s;
@@ -10,9 +10,9 @@ namespace DotRecast.Detour.Extras.Jumplink
{
return new RcVec3f()
{
X = Lerp(start.X, end.X, LMath.Min((LFloat)2f * u, (LFloat)1f)),
Y = Lerp(start.Y, end.Y, LMath.Max((LFloat)0f, (LFloat)2f * u - (LFloat)1f)),
Z = Lerp(start.Z, end.Z, LMath.Min((LFloat)2f * u, (LFloat)1f))
X = Lerp(start.X, end.X, LMath.Min(LFloat.L2 * u, LFloat.L1)),
Y = Lerp(start.Y, end.Y, LMath.Max(LFloat.L0, LFloat.L2 * u - LFloat.L1)),
Z = Lerp(start.Z, end.Z, LMath.Min(LFloat.L2 * u, LFloat.L1))
};
}
}
@@ -41,7 +41,7 @@ namespace DotRecast.Detour.Extras.Jumplink
for (int j = 0; j < nsamples; ++j)
{
LFloat v = (LFloat)j / (LFloat)(nsamples - 1);
LFloat v = j.ToLFloat() / (nsamples.ToLFloat() - 1);
LFloat ox = 2 * acfg.agentRadius + dx * v;
Trans2d(ref offset, es.az, es.ay, new RcVec2f { X = ox, Y = acfg.minHeight });
GroundSegment end = new GroundSegment();
@@ -72,7 +72,7 @@ namespace DotRecast.Detour.Extras.Jumplink
link.trajectory = es.trajectory;
for (int j = 0; j < link.nspine; ++j)
{
LFloat u = ((LFloat)j) / (link.nspine - 1);
LFloat u = j.ToLFloat() / (link.nspine - 1);
RcVec3f p = es.trajectory.Apply(sp, ep, u);
link.spine0[j * 3] = p.X;
link.spine0[j * 3 + 1] = p.Y;
@@ -25,11 +25,11 @@ namespace DotRecast.Detour.Extras.Jumplink
private LFloat InterpolateHeight(LFloat ys, LFloat ye, LFloat u)
{
if (u == 0f)
if (u == LFloat.L0)
{
return ys;
}
else if (u == 1.0f)
else if (u == LFloat.L1)
{
return ye;
}
@@ -48,14 +48,14 @@ namespace DotRecast.Detour.Extras.Jumplink
h2 = jumpHeight;
}
LFloat t = (LFloat)(LMath.Sqrt(h1) / (LMath.Sqrt(h2) + LMath.Sqrt(h1)));
LFloat t = (LMath.Sqrt(h1) / (LMath.Sqrt(h2) + LMath.Sqrt(h1)));
if (u <= t)
{
LFloat v1 = (LFloat)1.0f - (u / t);
LFloat v1 = LFloat.L1 - (u / t);
return ys + h1 - h1 * v1 * v1;
}
LFloat v = (u - t) / ((LFloat)1.0f - t);
LFloat v = (u - t) / (LFloat.L1 - t);
return ys + h1 - h2 * v * v;
}
}
@@ -8,7 +8,7 @@ namespace DotRecast.Detour.Extras.Jumplink
{
public LFloat Lerp(LFloat f, LFloat g, LFloat u)
{
return u * g + ((LFloat)1f - u) * f;
return u * g + (LFloat.L1 - u) * f;
}
public virtual RcVec3f Apply(RcVec3f start, RcVec3f end, LFloat u)
@@ -40,7 +40,7 @@ namespace DotRecast.Detour.Extras.Jumplink
int nsamples = LMath.Max(2, (int)LMath.Ceiling(d / cs));
for (int i = 0; i < nsamples; ++i)
{
LFloat u = (LFloat)i / (LFloat)(nsamples - 1);
LFloat u = i.ToLFloat() / (nsamples - 1);
RcVec3f p = tra.Apply(pa, pb, u);
if (CheckHeightfieldCollision(solid, p.X, p.Y + acfg.groundTolerance, p.Y + acfg.agentHeight, p.Z))
{
@@ -25,7 +25,7 @@ namespace DotRecast.Detour.Extras.Unity.Astar
{
public class GraphMeshDataReader : ZipBinaryReader
{
public LFloat INT_PRECISION_FACTOR = (LFloat)1000f;
public LFloat INT_PRECISION_FACTOR = LFloat.L1000;
public GraphMeshData Read(ZipArchive file, string filename, GraphMeta meta, int maxVertPerPoly)
{
@@ -126,17 +126,17 @@ namespace DotRecast.Detour.Extras.Unity.Astar
header.detailMeshCount = nodeCount;
header.detailTriCount = nodeCount;
header.maxLinkCount = nodeCount * 3 * 2; // XXX: Needed by Recast, not needed by recast4j
header.bmin.X = meta.forcedBoundsCenter.x - (LFloat)0.5f * meta.forcedBoundsSize.x +
header.bmin.X = meta.forcedBoundsCenter.x - LFloat.L0D5 * meta.forcedBoundsSize.x +
meta.cellSize * meta.tileSizeX * x;
header.bmin.Y = ymin;
header.bmin.Z = meta.forcedBoundsCenter.z - (LFloat)0.5f * meta.forcedBoundsSize.z +
header.bmin.Z = meta.forcedBoundsCenter.z - LFloat.L0D5 * meta.forcedBoundsSize.z +
meta.cellSize * meta.tileSizeZ * z;
header.bmax.X = meta.forcedBoundsCenter.x - (LFloat)0.5f * meta.forcedBoundsSize.x +
header.bmax.X = meta.forcedBoundsCenter.x - LFloat.L0D5 * meta.forcedBoundsSize.x +
meta.cellSize * meta.tileSizeX * (x + 1);
header.bmax.Y = ymax;
header.bmax.Z = meta.forcedBoundsCenter.z - (LFloat)0.5f * meta.forcedBoundsSize.z +
header.bmax.Z = meta.forcedBoundsCenter.z - LFloat.L0D5 * meta.forcedBoundsSize.z +
meta.cellSize * meta.tileSizeZ * (z + 1);
header.bvQuantFactor = (LFloat)1.0f / meta.cellSize;
header.bvQuantFactor = LFloat.L1 / meta.cellSize;
header.offMeshBase = nodeCount;
header.walkableClimb = meta.walkableClimb;
header.walkableHeight = meta.walkableHeight;
@@ -53,7 +53,7 @@ namespace DotRecast.Detour.Extras.Unity.Astar
{
l.clamped1, l.clamped2
};
connection.rad = (LFloat)0.1f;
connection.rad = LFloat.L0D1;
connection.side = startTile == endTile
? 0xFF
: DtNavMeshBuilder.ClassifyOffMeshPoint(connection.pos[1], startTile.header.bmin, startTile.header.bmax);
@@ -63,9 +63,9 @@ namespace DotRecast.Detour.Extras.Unity.Astar
option.maxPolys = 32768;
option.tileWidth = graphMeta.tileSizeX * graphMeta.cellSize;
option.tileHeight = graphMeta.tileSizeZ * graphMeta.cellSize;
option.orig.X = -(LFloat)0.5f * graphMeta.forcedBoundsSize.x + graphMeta.forcedBoundsCenter.x;
option.orig.Y = -(LFloat)0.5f * graphMeta.forcedBoundsSize.y + graphMeta.forcedBoundsCenter.y;
option.orig.Z = -(LFloat)0.5f * graphMeta.forcedBoundsSize.z + graphMeta.forcedBoundsCenter.z;
option.orig.X = -LFloat.L0D5 * graphMeta.forcedBoundsSize.x + graphMeta.forcedBoundsCenter.x;
option.orig.Y = -LFloat.L0D5 * graphMeta.forcedBoundsSize.y + graphMeta.forcedBoundsCenter.y;
option.orig.Z = -LFloat.L0D5 * graphMeta.forcedBoundsSize.z + graphMeta.forcedBoundsCenter.z;
DtNavMesh mesh = new DtNavMesh(option, 3);
foreach (DtMeshData t in graphMeshData.tiles)
{
@@ -378,10 +378,10 @@ namespace DotRecast.Detour.TileCache
ob.type = DtTileCacheObstacleType.ORIENTED_BOX;
ob.center = center;
ob.extents = extents;
LFloat coshalf = LMath.Cos((LFloat)0.5f * yRadians);
LFloat sinhalf = LMath.Sin(-(LFloat)0.5f * yRadians);
LFloat coshalf = LMath.Cos(LFloat.L0D5 * yRadians);
LFloat sinhalf = LMath.Sin(-LFloat.L0D5 * yRadians);
ob.rotAux[0] = coshalf * sinhalf;
ob.rotAux[1] = coshalf * coshalf - (LFloat)0.5f;
ob.rotAux[1] = coshalf * coshalf - LFloat.L0D5;
return AddObstacleRequest(ob).refs;
}
@@ -710,7 +710,7 @@ namespace DotRecast.Detour.TileCache
}
else if (ob.type == DtTileCacheObstacleType.ORIENTED_BOX)
{
LFloat maxr = (LFloat)1.41f * LMath.Max(ob.extents.X, ob.extents.Z);
LFloat maxr = new LFloat("",1410) * LMath.Max(ob.extents.X, ob.extents.Z);
bmin.X = ob.center.X - maxr;
bmax.X = ob.center.X + maxr;
bmin.Y = ob.center.Y - ob.extents.Y;
@@ -609,7 +609,7 @@ namespace DotRecast.Detour.TileCache
int lh = layer.heights[idx];
if (LMath.Abs(lh - y) <= walkableClimb && layer.areas[idx] != DT_TILECACHE_NULL_AREA)
{
height = LMath.Max(height, (LFloat)(char)lh);
height = LMath.Max(height, lh);
portal &= (layer.cons[idx] >> 4);
if (preg != 0xff && preg != layer.regs[idx])
allSameReg = false;
@@ -1812,12 +1812,12 @@ namespace DotRecast.Detour.TileCache
bmax.X = pos.X + radius;
bmax.Y = pos.Y + height;
bmax.Z = pos.Z + radius;
LFloat r2 = RcMath.Sqr(radius / cs + (LFloat)0.5f);
LFloat r2 = RcMath.Sqr(radius / cs + LFloat.L0D5);
int w = layer.header.width;
int h = layer.header.height;
LFloat ics = (LFloat)1.0f / cs;
LFloat ich = (LFloat)1.0f / ch;
LFloat ics = LFloat.L1 / cs;
LFloat ich = LFloat.L1 / ch;
LFloat px = (pos.X - orig.X) * ics;
LFloat pz = (pos.Z - orig.Z) * ics;
@@ -1851,8 +1851,8 @@ namespace DotRecast.Detour.TileCache
{
for (int x = minx; x <= maxx; ++x)
{
LFloat dx = x + (LFloat)0.5f - px;
LFloat dz = z + (LFloat)0.5f - pz;
LFloat dx = x + LFloat.L0D5 - px;
LFloat dz = z + LFloat.L0D5 - pz;
if (dx * dx + dz * dz > r2)
continue;
int y = layer.heights[x + z * w];
@@ -1867,8 +1867,8 @@ namespace DotRecast.Detour.TileCache
{
int w = layer.header.width;
int h = layer.header.height;
LFloat ics = (LFloat)1.0f / cs;
LFloat ich = (LFloat)1.0f / ch;
LFloat ics = LFloat.L1 / cs;
LFloat ich = LFloat.L1 / ch;
int minx = (int)LMath.Floor((bmin.X - orig.X) * ics);
int miny = (int)LMath.Floor((bmin.Y - orig.Y) * ich);
@@ -1996,13 +1996,13 @@ namespace DotRecast.Detour.TileCache
{
int w = layer.header.width;
int h = layer.header.height;
LFloat ics = (LFloat)1.0f / cs;
LFloat ich = (LFloat)1.0f / ch;
LFloat ics = LFloat.L1 / cs;
LFloat ich = LFloat.L1 / ch;
LFloat cx = (center.X - orig.X) * ics;
LFloat cz = (center.Z - orig.Z) * ics;
LFloat maxr = (LFloat)1.41f * LMath.Max(extents.X, extents.Z);
LFloat maxr = new LFloat("",1410) * LMath.Max(extents.X, extents.Z);
int minx = (int)LMath.Floor(cx - maxr * ics);
int maxx = (int)LMath.Floor(cx + maxr * ics);
int minz = (int)LMath.Floor(cz - maxr * ics);
@@ -2028,14 +2028,14 @@ namespace DotRecast.Detour.TileCache
if (maxz >= h)
maxz = h - 1;
LFloat xhalf = extents.X * ics + (LFloat)0.5f;
LFloat zhalf = extents.Z * ics + (LFloat)0.5f;
LFloat xhalf = extents.X * ics + LFloat.L0D5;
LFloat zhalf = extents.Z * ics + LFloat.L0D5;
for (int z = minz; z <= maxz; ++z)
{
for (int x = minx; x <= maxx; ++x)
{
LFloat x2 = (LFloat)2.0f * (x - cx);
LFloat z2 = (LFloat)2.0f * (z - cz);
LFloat x2 = LFloat.L2 * (x - cx);
LFloat z2 = LFloat.L2 * (z - cz);
LFloat xrot = rotAux[1] * x2 + rotAux[0] * z2;
if (xrot > xhalf || xrot < -xhalf)
continue;
@@ -34,7 +34,7 @@ namespace DotRecast.Detour.TileCache
public LFloat radius, height;
public RcVec3f center = new RcVec3f();
public RcVec3f extents = new RcVec3f();
public readonly LFloat[] rotAux = new LFloat[2]; // { Cos(0.5f*angle)*Sin(-0.5f*angle); Cos(0.5f*angle)*Cos(0.5f*angle) - 0.5 }
public readonly LFloat[] rotAux = new LFloat[2]; // { Cos(LFloat.L0D5*angle)*Sin(-LFloat.L0D5*angle); Cos(LFloat.L0D5*angle)*Cos(LFloat.L0D5*angle) - 0.5 }
public List<long> touched = new List<long>();
public readonly List<long> pending = new List<long>();
@@ -29,7 +29,7 @@ namespace DotRecast.Detour
*/
public static class DtConvexConvexIntersections
{
private static LFloat EPSILON = (LFloat)0.0001f;
private static LFloat EPSILON = LFloat.EPS_1MS;
public static LFloat[] Intersect(LFloat[] p, LFloat[] q)
{
@@ -68,10 +68,10 @@ namespace DotRecast.Detour
LFloat bHA = DtUtils.TriArea2D(a1, a, b);
if (LMath.Abs(cross) < EPSILON)
{
cross = (LFloat)0f;
cross = LFloat.L0;
}
bool parallel = cross == 0f;
bool parallel = cross == LFloat.L0;
DtConvexConvexIntersection code = parallel ? ParallelInt(a1, a, b1, b, ref ip, ref iq) : SegSegInt(a1, a, b1, b, ref ip, ref iq);
if (code == DtConvexConvexIntersection.Single)
@@ -97,7 +97,7 @@ namespace DotRecast.Detour
}
/* Special case: A & B parallel and separated. */
if (parallel && aHB < 0f && bHA < 0f)
if (parallel && aHB < LFloat.L0 && bHA < LFloat.L0)
{
return null;
}
@@ -217,7 +217,7 @@ namespace DotRecast.Detour
{
if (DtUtils.IntersectSegSeg2D(a, b, c, d, out var s, out var t))
{
if (s >= 0.0f && s <= 1.0f && t >= 0.0f && t <= 1.0f)
if (s >= LFloat.L0 && s <= LFloat.L1 && t >= LFloat.L0 && t <= LFloat.L1)
{
p.X = a.X + (b.X - a.X) * s;
p.Y = a.Y + (b.Y - a.Y) * s;
@@ -25,7 +25,7 @@ namespace DotRecast.Detour
{
public class DtDefaultQueryHeuristic : IDtQueryHeuristic
{
public static LFloat H_SCALE = (LFloat)0.999f; // Search heuristic scale.
public static LFloat H_SCALE = new LFloat("",999); // Search heuristic scale.
public static readonly DtDefaultQueryHeuristic Default = new DtDefaultQueryHeuristic(H_SCALE);
private readonly LFloat scale;
@@ -7,7 +7,7 @@ namespace DotRecast.Detour
public static readonly DtFindPathOption NoOption = new DtFindPathOption(DtDefaultQueryHeuristic.Default, 0, 0);
public static readonly DtFindPathOption AnyAngle = new DtFindPathOption(DtDefaultQueryHeuristic.Default, DtFindPathOptions.DT_FINDPATH_ANY_ANGLE, LFloat.MaxValue);
public static readonly DtFindPathOption ZeroScale = new DtFindPathOption(new DtDefaultQueryHeuristic((LFloat)0.0f), 0, 0);
public static readonly DtFindPathOption ZeroScale = new DtFindPathOption(new DtDefaultQueryHeuristic(LFloat.L0), 0, 0);
public readonly IDtQueryHeuristic heuristic;
public readonly int options;
@@ -67,7 +67,7 @@ namespace DotRecast.Detour
/// Limit raycasting during any angle pahfinding
/// The limit is given as a multiple of the character radius
public static LFloat DT_RAY_CAST_LIMIT_PROPORTIONS = (LFloat)50.0f;
public static LFloat DT_RAY_CAST_LIMIT_PROPORTIONS = LFloat.L50;
private readonly DtNavMeshParams m_params; // < Current initialization params. TODO: do not store this info twice.
private readonly RcVec3f m_orig; // < Origin of the tile (0,0)
@@ -823,8 +823,8 @@ namespace DotRecast.Detour
tmax = temp;
}
link.bmin = (int)LMath.Round(LMath.Clamp(tmin, (LFloat)0.0f, (LFloat)1.0f) * (LFloat)255.0f);
link.bmax = (int)LMath.Round(LMath.Clamp(tmax, (LFloat)0.0f, (LFloat)1.0f) * (LFloat)255.0f);
link.bmin = (int)LMath.Round(LMath.Clamp(tmin, LFloat.L0, LFloat.L1) * LFloat.L255);
link.bmax = (int)LMath.Round(LMath.Clamp(tmax, LFloat.L0, LFloat.L1) * LFloat.L255);
}
else if (dir == 2 || dir == 6)
{
@@ -839,8 +839,8 @@ namespace DotRecast.Detour
tmax = temp;
}
link.bmin = (int)LMath.Round(LMath.Clamp(tmin, (LFloat)0.0f, (LFloat)1.0f) * (LFloat)255.0f);
link.bmax = (int)LMath.Round(LMath.Clamp(tmax, (LFloat)0.0f, (LFloat)1.0f) * (LFloat)255.0f);
link.bmin = (int)LMath.Round(LMath.Clamp(tmin, LFloat.L0, LFloat.L1) * LFloat.L255);
link.bmax = (int)LMath.Round(LMath.Clamp(tmax, LFloat.L0, LFloat.L1) * LFloat.L255);
}
}
}
@@ -968,7 +968,7 @@ namespace DotRecast.Detour
int vd = poly.verts[(j + 1) % nv] * 3;
LFloat bpos = GetSlabCoord(tile.data.verts, vc, side);
// Segments are not close enough.
if (LMath.Abs(apos - bpos) > 0.01f)
if (LMath.Abs(apos - bpos) > new LFloat("",10))
{
continue;
}
@@ -976,7 +976,7 @@ namespace DotRecast.Detour
// Check if the segments touch.
CalcSlabEndPoints(tile.data.verts, vc, vd, ref bmin, ref bmax, side);
if (!OverlapSlabs(amin, amax, bmin, bmax, (LFloat)0.01f, tile.data.header.walkableClimb))
if (!OverlapSlabs(amin, amax, bmin, bmax, (new LFloat("",10)), tile.data.header.walkableClimb))
{
continue;
}
@@ -1774,7 +1774,7 @@ namespace DotRecast.Detour
center.Z += tile.data.verts[v + 2];
}
LFloat s = (LFloat)1.0f / poly.vertCount;
LFloat s = LFloat.L1 / poly.vertCount;
center.X *= s;
center.Y *= s;
center.Z *= s;
@@ -439,7 +439,7 @@ namespace DotRecast.Detour
header.detailMeshCount = option.polyCount;
header.detailVertCount = uniqueDetailVertCount;
header.detailTriCount = detailTriCount;
header.bvQuantFactor = (LFloat)1.0f / option.cs;
header.bvQuantFactor = LFloat.L1 / option.cs;
header.offMeshBase = option.polyCount;
header.walkableHeight = option.walkableHeight;
header.walkableRadius = option.walkableRadius;
@@ -66,7 +66,7 @@ namespace DotRecast.Detour
// Randomly pick one tile. Assume that all tiles cover roughly the same area.
DtMeshTile tile = null;
LFloat tsum = (LFloat)0.0f;
LFloat tsum = LFloat.L0;
for (int i = 0; i < m_nav.GetMaxTiles(); i++)
{
DtMeshTile mt = m_nav.GetTile(i);
@@ -76,7 +76,7 @@ namespace DotRecast.Detour
}
// Choose random tile using reservoir sampling.
LFloat area = (LFloat)1.0f; // Could be tile area too.
LFloat area = LFloat.L1; // Could be tile area too.
tsum += area;
LFloat u = frand.Next();
if (u * tsum <= area)
@@ -95,7 +95,7 @@ namespace DotRecast.Detour
long polyRef = 0;
long @base = m_nav.GetPolyRefBase(tile);
LFloat areaSum = (LFloat)0.0f;
LFloat areaSum = LFloat.L0;
for (int i = 0; i < tile.data.header.polyCount; ++i)
{
DtPoly p = tile.data.polys[i];
@@ -113,7 +113,7 @@ namespace DotRecast.Detour
}
// Calc area of the polygon.
LFloat polyArea = (LFloat)0.0f;
LFloat polyArea = LFloat.L0;
for (int j = 2; j < p.vertCount; ++j)
{
int va = p.verts[0] * 3;
@@ -243,7 +243,7 @@ namespace DotRecast.Detour
DtStatus status = DtStatus.DT_SUCCESS;
LFloat radiusSqr = maxRadius * maxRadius;
LFloat areaSum = (LFloat)0.0f;
LFloat areaSum = LFloat.L0;
DtPoly randomPoly = null;
long randomPolyRef = 0;
@@ -263,7 +263,7 @@ namespace DotRecast.Detour
if (bestPoly.GetPolyType() == DtPolyTypes.DT_POLYTYPE_GROUND)
{
// Calc area of the polygon.
LFloat polyArea = (LFloat)0.0f;
LFloat polyArea = LFloat.L0;
LFloat[] polyVerts = new LFloat[bestPoly.vertCount * 3];
for (int j = 0; j < bestPoly.vertCount; ++j)
{
@@ -350,7 +350,7 @@ namespace DotRecast.Detour
// Cost
if (neighbourNode.flags == 0)
{
neighbourNode.pos = RcVec3f.Lerp(va, vb, (LFloat)0.5f);
neighbourNode.pos = RcVec3f.Lerp(va, vb, LFloat.L0D5);
}
LFloat total = bestNode.total + RcVec3f.Distance(bestNode.pos, neighbourNode.pos);
@@ -770,7 +770,7 @@ namespace DotRecast.Detour
LFloat raycastLimitSqr = RcMath.Sqr(raycastLimit);
// trade quality with performance?
if ((options & DtFindPathOptions.DT_FINDPATH_ANY_ANGLE) != 0 && raycastLimit < 0f)
if ((options & DtFindPathOptions.DT_FINDPATH_ANY_ANGLE) != 0 && raycastLimit < LFloat.L0)
{
// limiting to several times the character radius yields nice results. It is not sensitive
// so it is enough to compute it from the first tile.
@@ -904,7 +904,7 @@ namespace DotRecast.Detour
DtRaycastOptions.DT_RAYCAST_USE_COSTS, ref rayHit, grandpaRef);
if (rayStatus.Succeeded())
{
foundShortCut = rayHit.t >= 1.0f;
foundShortCut = rayHit.t >= LFloat.L1;
if (foundShortCut)
{
shortcut = new List<long>(rayHit.path);
@@ -1012,7 +1012,7 @@ namespace DotRecast.Detour
*/
public DtStatus InitSlicedFindPath(long startRef, long endRef, RcVec3f startPos, RcVec3f endPos, IDtQueryFilter filter, int options)
{
return InitSlicedFindPath(startRef, endRef, startPos, endPos, filter, options, DtDefaultQueryHeuristic.Default, -(LFloat)1.0f);
return InitSlicedFindPath(startRef, endRef, startPos, endPos, filter, options, DtDefaultQueryHeuristic.Default, -LFloat.L1);
}
public DtStatus InitSlicedFindPath(long startRef, long endRef, RcVec3f startPos, RcVec3f endPos, IDtQueryFilter filter, int options, LFloat raycastLimit)
@@ -1041,7 +1041,7 @@ namespace DotRecast.Detour
}
// trade quality with performance?
if ((options & DtFindPathOptions.DT_FINDPATH_ANY_ANGLE) != 0 && raycastLimit < 0f)
if ((options & DtFindPathOptions.DT_FINDPATH_ANY_ANGLE) != 0 && raycastLimit < LFloat.L0)
{
// limiting to several times the character radius yields nice results. It is not sensitive
// so it is enough to compute it from the first tile.
@@ -1228,7 +1228,7 @@ namespace DotRecast.Detour
DtRaycastOptions.DT_RAYCAST_USE_COSTS, ref rayHit, grandpaRef);
if (status.Succeeded())
{
foundShortCut = rayHit.t >= 1.0f;
foundShortCut = rayHit.t >= LFloat.L1;
if (foundShortCut)
{
shortcut = new List<long>(rayHit.path);
@@ -1616,7 +1616,7 @@ namespace DotRecast.Detour
if (i == 0)
{
var distSqr = DtUtils.DistancePtSegSqr2D(portalApex, left, right, out var t);
if (distSqr < RcMath.Sqr((LFloat)0.001f))
if (distSqr < RcMath.Sqr(LFloat.EPS_1MS))
{
continue;
}
@@ -1631,9 +1631,9 @@ namespace DotRecast.Detour
}
// Right vertex.
if (DtUtils.TriArea2D(portalApex, portalRight, right) <= 0.0f)
if (DtUtils.TriArea2D(portalApex, portalRight, right) <= (LFloat.L0))
{
if (DtUtils.VEqual(portalApex, portalRight) || DtUtils.TriArea2D(portalApex, portalLeft, right) > 0.0f)
if (DtUtils.VEqual(portalApex, portalRight) || DtUtils.TriArea2D(portalApex, portalLeft, right) > (LFloat.L0))
{
portalRight = right;
rightPolyRef = (i + 1 < pathSize) ? path[i + 1] : 0;
@@ -1687,9 +1687,9 @@ namespace DotRecast.Detour
}
// Left vertex.
if (DtUtils.TriArea2D(portalApex, portalLeft, left) >= 0.0f)
if (DtUtils.TriArea2D(portalApex, portalLeft, left) >= (LFloat.L0))
{
if (DtUtils.VEqual(portalApex, portalLeft) || DtUtils.TriArea2D(portalApex, portalRight, left) < 0.0f)
if (DtUtils.VEqual(portalApex, portalLeft) || DtUtils.TriArea2D(portalApex, portalRight, left) < (LFloat.L0))
{
portalLeft = left;
leftPolyRef = (i + 1 < pathSize) ? path[i + 1] : 0;
@@ -1823,8 +1823,8 @@ namespace DotRecast.Detour
bestPos = startPos;
// Search constraints
var searchPos = RcVec3f.Lerp(startPos, endPos, (LFloat)0.5f);
LFloat searchRadSqr = RcMath.Sqr(RcVec3f.Distance(startPos, endPos) / (LFloat)2.0f + (LFloat)0.001f);
var searchPos = RcVec3f.Lerp(startPos, endPos, LFloat.L0D5);
LFloat searchRadSqr = RcMath.Sqr(RcVec3f.Distance(startPos, endPos) / LFloat.L2 + LFloat.EPS_1MS);
Span<LFloat> verts = stackalloc LFloat[m_nav.GetMaxVertsPerPoly() * 3];
@@ -2089,7 +2089,7 @@ namespace DotRecast.Detour
// Unpack portal limits.
if (link.bmin != 0 || link.bmax != 255)
{
LFloat s = (LFloat)1.0f / (LFloat)255.0f;
LFloat s = LFloat.L1 / LFloat.L255;
LFloat tmin = link.bmin * s;
LFloat tmax = link.bmax * s;
left = RcVecUtils.Lerp(fromTile.data.verts, v0 * 3, v1 * 3, tmin);
@@ -2109,9 +2109,9 @@ namespace DotRecast.Detour
return DtStatus.DT_FAILURE | DtStatus.DT_INVALID_PARAM;
}
mid.X = (left.X + right.X) * (LFloat)0.5f;
mid.Y = (left.Y + right.Y) * (LFloat)0.5f;
mid.Z = (left.Z + right.Z) * (LFloat)0.5f;
mid.X = (left.X + right.X) * LFloat.L0D5;
mid.Y = (left.Y + right.Y) * LFloat.L0D5;
mid.Z = (left.Z + right.Z) * LFloat.L0D5;
return DtStatus.DT_SUCCESS;
}
@@ -2126,10 +2126,10 @@ namespace DotRecast.Detour
return DtStatus.DT_FAILURE;
}
LFloat t = (LFloat)0.5f;
LFloat t = LFloat.L0D5;
if (DtUtils.IntersectSegSeg2D(fromPos, toPos, left, right, out var _, out var t2))
{
t = LMath.Clamp(t2, (LFloat)0.1f, (LFloat)0.9f);
t = LMath.Clamp(t2, LFloat.L0D1, LFloat.L0D9);
}
pt = RcVec3f.Lerp(left, right, t);
@@ -2378,7 +2378,7 @@ namespace DotRecast.Detour
if (link.side == 0 || link.side == 4)
{
// Calculate link size.
LFloat s = (LFloat)1.0f / (LFloat)255.0f;
LFloat s = LFloat.L1 / LFloat.L255;
LFloat lmin = tile.data.verts[left + 2]
+ (tile.data.verts[right + 2] - tile.data.verts[left + 2]) * (link.bmin * s);
LFloat lmax = tile.data.verts[left + 2]
@@ -2399,7 +2399,7 @@ namespace DotRecast.Detour
else if (link.side == 2 || link.side == 6)
{
// Calculate link size.
LFloat s = (LFloat)1.0f / (LFloat)255.0f;
LFloat s = LFloat.L1 / LFloat.L255;
LFloat lmin = tile.data.verts[left]
+ (tile.data.verts[right] - tile.data.verts[left]) * (link.bmin * s);
LFloat lmax = tile.data.verts[left]
@@ -2612,7 +2612,7 @@ namespace DotRecast.Detour
// Cost
if (neighbourNode.flags == 0)
{
neighbourNode.pos = RcVec3f.Lerp(va, vb, (LFloat)0.5f);
neighbourNode.pos = RcVec3f.Lerp(va, vb, LFloat.L0D5);
}
LFloat cost = filter.GetCost(bestNode.pos, neighbourNode.pos, parentRef, parentTile, parentPoly, bestRef,
@@ -2702,7 +2702,7 @@ namespace DotRecast.Detour
centerPos += verts[i];
}
LFloat scale = (LFloat)1.0f / nverts;
LFloat scale = LFloat.L1 / nverts;
centerPos.X *= scale;
centerPos.Y *= scale;
centerPos.Z *= scale;
@@ -2779,7 +2779,7 @@ namespace DotRecast.Detour
continue;
}
if (tmin > 1.0f || tmax < 0.0f)
if (tmin > LFloat.L1 || tmax < (LFloat.L0))
{
continue;
}
@@ -2794,7 +2794,7 @@ namespace DotRecast.Detour
// Cost
if (neighbourNode.flags == 0)
{
neighbourNode.pos = RcVec3f.Lerp(va, vb, (LFloat)0.5f);
neighbourNode.pos = RcVec3f.Lerp(va, vb, LFloat.L0D5);
}
LFloat cost = filter.GetCost(bestNode.pos, neighbourNode.pos, parentRef, parentTile, parentPoly, bestRef,
@@ -3137,8 +3137,8 @@ namespace DotRecast.Detour
// Portal segment.
if (storePortals && ints[k].refs != 0)
{
LFloat tmin = ints[k].tmin / (LFloat)255.0f;
LFloat tmax = ints[k].tmax / (LFloat)255.0f;
LFloat tmin = ints[k].tmin / LFloat.L255;
LFloat tmax = ints[k].tmax / LFloat.L255;
var seg = new RcSegmentVert();
seg.vmin = RcVecUtils.Lerp(tile.data.verts, vj, vi, tmin);
seg.vmax = RcVecUtils.Lerp(tile.data.verts, vj, vi, tmax);
@@ -3151,8 +3151,8 @@ namespace DotRecast.Detour
int imax = ints[k].tmin;
if (imin != imax)
{
LFloat tmin = imin / (LFloat)255.0f;
LFloat tmax = imax / (LFloat)255.0f;
LFloat tmin = imin / LFloat.L255;
LFloat tmax = imax / LFloat.L255;
var seg = new RcSegmentVert();
seg.vmin = RcVecUtils.Lerp(tile.data.verts, vj, vi, tmin);
seg.vmax = RcVecUtils.Lerp(tile.data.verts, vj, vi, tmax);
@@ -30,7 +30,7 @@ namespace DotRecast.Detour
{
public static bool Raycast(DtNavMesh mesh, RcVec3f src, RcVec3f dst, out LFloat hitTime)
{
hitTime = (LFloat)0.0f;
hitTime = LFloat.L0;
for (int t = 0; t < mesh.GetMaxTiles(); ++t)
{
DtMeshTile tile = mesh.GetTile(t);
@@ -48,7 +48,7 @@ namespace DotRecast.Detour
private static bool Raycast(DtMeshTile tile, RcVec3f sp, RcVec3f sq, out LFloat hitTime)
{
hitTime = (LFloat)0.0f;
hitTime = LFloat.L0;
for (int i = 0; i < tile.data.header.polyCount; ++i)
{
DtPoly p = tile.data.polys[i];
@@ -52,7 +52,7 @@ namespace DotRecast.Detour
{
// Stop at Off-Mesh link or when point is further than slop away.
if (((straightPath[ns].flags & DtStraightPathFlags.DT_STRAIGHTPATH_OFFMESH_CONNECTION) != 0)
|| !InRange(straightPath[ns].pos, startPos, minTargetDist, (LFloat)1000.0f))
|| !InRange(straightPath[ns].pos, startPos, minTargetDist, LFloat.L1000))
break;
ns++;
}
@@ -61,7 +61,7 @@ namespace DotRecast.Detour
m_excludeFlags = 0;
for (int i = 0; i < DtNavMesh.DT_MAX_AREAS; ++i)
{
m_areaCost[i] = (LFloat)1.0f;
m_areaCost[i] = LFloat.L1;
}
}
@@ -76,7 +76,7 @@ namespace DotRecast.Detour
for (int i = areaCost.Length; i < DtNavMesh.DT_MAX_AREAS; ++i)
{
m_areaCost[i] = (LFloat)1.0f;
m_areaCost[i] = LFloat.L1;
}
}
@@ -7,7 +7,7 @@ namespace DotRecast.Detour
{
public static class DtUtils
{
private static readonly LFloat EQUAL_THRESHOLD = (LFloat)0.0001f;
private static readonly LFloat EQUAL_THRESHOLD = LFloat.EPS_1MS;
public static int NextPow2(int v)
{
@@ -169,17 +169,17 @@ namespace DotRecast.Detour
public static RcVec3f RandomPointInConvexPoly(Span<LFloat> pts, int npts, Span<LFloat> areas, LFloat s, LFloat t)
{
// Calc triangle araes
LFloat areasum = (LFloat)0.0f;
LFloat areasum = LFloat.L0;
for (int i = 2; i < npts; i++)
{
areas[i] = TriArea2D(pts, 0, (i - 1) * 3, i * 3);
areasum += LMath.Max((LFloat)0.001f, areas[i]);
areasum += LMath.Max(LFloat.EPS_1MS, areas[i]);
}
// Find sub triangle weighted by area.
LFloat thr = s * areasum;
LFloat acc = (LFloat)0.0f;
LFloat u = (LFloat)1.0f;
LFloat acc = LFloat.L0;
LFloat u = LFloat.L1;
int tri = npts - 1;
for (int i = 2; i < npts; i++)
{
@@ -238,7 +238,7 @@ namespace DotRecast.Detour
}
// If point lies inside the triangle, return interpolated ycoord.
if (u >= 0.0f && v >= 0.0f && (u + v) <= denom)
if (u >= LFloat.L0 && v >= LFloat.L0 && (u + v) <= denom)
{
h = a.Y + (v0.Y * u + v1.Y * v) / denom;
return true;
@@ -347,7 +347,7 @@ namespace DotRecast.Detour
out LFloat tmin, out LFloat tmax,
out int segMin, out int segMax)
{
LFloat EPS = (LFloat)0.0001f;
LFloat EPS = LFloat.EPS_1MS;
tmin = 0;
tmax = 1;
@@ -100,7 +100,7 @@ namespace DotRecast.Recast.Toolset.Geom
LFloat d = LMath.Sqrt(normals[i] * normals[i] + normals[i + 1] * normals[i + 1] + normals[i + 2] * normals[i + 2]);
if (d > 0)
{
d = (LFloat)1.0f / d;
d = LFloat.L1 / d;
normals[i] *= d;
normals[i + 1] *= d;
normals[i + 2] *= d;
@@ -136,7 +136,7 @@ namespace DotRecast.Recast.Toolset.Geom
public bool RaycastMesh(RcVec3f src, RcVec3f dst, out LFloat tmin)
{
tmin = (LFloat)1.0f;
tmin = LFloat.L1;
// Prune hit ray.
if (!RcIntersections.IsectSegAABB(src, dst, bmin, bmax, out var btmin, out var btmax))
@@ -157,7 +157,7 @@ namespace DotRecast.Recast.Toolset.Geom
return false;
}
tmin = (LFloat)1.0f;
tmin = LFloat.L1;
bool hit = false;
foreach (RcChunkyTriMeshNode chunk in chunks)
{
@@ -14,14 +14,14 @@ namespace DotRecast.Recast.Toolset.Gizmos
public static readonly RcVec3f[] VERTS =
{
new RcVec3f(-(LFloat)1f, -(LFloat)1f, -(LFloat)1f),
new RcVec3f((LFloat)1f, -(LFloat)1f, -(LFloat)1f),
new RcVec3f((LFloat)1f, -(LFloat)1f, (LFloat)1f),
new RcVec3f(-(LFloat)1f, -(LFloat)1f, (LFloat)1f),
new RcVec3f(-(LFloat)1f, (LFloat)1f, -(LFloat)1f),
new RcVec3f((LFloat)1f, (LFloat)1f, -(LFloat)1f),
new RcVec3f((LFloat)1f, (LFloat)1f, (LFloat)1f),
new RcVec3f(-(LFloat)1f, (LFloat)1f, (LFloat)1f),
new RcVec3f(-LFloat.L1, -LFloat.L1, -LFloat.L1),
new RcVec3f(LFloat.L1, -LFloat.L1, -LFloat.L1),
new RcVec3f(LFloat.L1, -LFloat.L1, LFloat.L1),
new RcVec3f(-LFloat.L1, -LFloat.L1, LFloat.L1),
new RcVec3f(-LFloat.L1, LFloat.L1, -LFloat.L1),
new RcVec3f(LFloat.L1, LFloat.L1, -LFloat.L1),
new RcVec3f(LFloat.L1, LFloat.L1, LFloat.L1),
new RcVec3f(-LFloat.L1, LFloat.L1, LFloat.L1),
};
public readonly LFloat[] vertices = new LFloat[8 * 3];
@@ -39,9 +39,9 @@ namespace DotRecast.Recast.Toolset.Gizmos
this.halfEdges = halfEdges;
for (int i = 0; i < 8; ++i)
{
LFloat s0 = (i & 1) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s1 = (i & 2) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s2 = (i & 4) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s0 = (i & 1) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s1 = (i & 2) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s2 = (i & 4) != 0 ? LFloat.L1 : -LFloat.L1;
vertices[i * 3 + 0] = center.X + s0 * halfEdges[0].X + s1 * halfEdges[1].X + s2 * halfEdges[2].X;
vertices[i * 3 + 1] = center.Y + s0 * halfEdges[0].Y + s1 * halfEdges[1].Y + s2 * halfEdges[2].Y;
vertices[i * 3 + 2] = center.Z + s0 * halfEdges[0].Z + s1 * halfEdges[1].Z + s2 * halfEdges[2].Z;
@@ -16,8 +16,8 @@ namespace DotRecast.Recast.Toolset.Gizmos
{
center = new LFloat[]
{
(LFloat)0.5f * (start.X + end.X), (LFloat)0.5f * (start.Y + end.Y),
(LFloat)0.5f * (start.Z + end.Z)
LFloat.L0D5 * (start.X + end.X), LFloat.L0D5 * (start.Y + end.Y),
LFloat.L0D5 * (start.Z + end.Z)
};
RcVec3f axis = new RcVec3f(end.X - start.X, end.Y - start.Y, end.Z - start.Z);
RcVec3f[] normals = new RcVec3f[3];
@@ -32,7 +32,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
var trY = new RcVec3f(normals[0].Y, normals[1].Y, normals[2].Y);
var trZ = new RcVec3f(normals[0].Z, normals[1].Z, normals[2].Z);
LFloat[] spVertices = GenerateSphericalVertices();
LFloat halfLength = (LFloat)0.5f * axis.Length();
LFloat halfLength = LFloat.L0D5 * axis.Length();
vertices = new LFloat[spVertices.Length];
gradient = new LFloat[spVertices.Length / 3];
RcVec3f v = new RcVec3f();
@@ -49,14 +49,14 @@ namespace DotRecast.Recast.Toolset.Gizmos
v.Y = vertices[i + 1] - center[1];
v.Z = vertices[i + 2] - center[2];
v = RcVec3f.Normalize(v);
gradient[i / 3] = LMath.Clamp((LFloat)0.57735026f * (v.X + v.Y + v.Z), -(LFloat)1, (LFloat)1);
gradient[i / 3] = LMath.Clamp(new LFloat("",577) * (v.X + v.Y + v.Z), -LFloat.L1, LFloat.L1);
}
}
private RcVec3f GetSideVector(RcVec3f axis)
{
var side = new RcVec3f(1, 0, 0);
if (axis.X > 0.8)
if (axis.X > LFloat.L0D8)
{
side = new RcVec3f(0, 0, 1);
}
@@ -16,8 +16,8 @@ namespace DotRecast.Recast.Toolset.Gizmos
public RcCylinderGizmo(RcVec3f start, RcVec3f end, LFloat radius)
{
center = new RcVec3f(
(LFloat)0.5f * (start.X + end.X), (LFloat)0.5f * (start.Y + end.Y),
(LFloat)0.5f * (start.Z + end.Z)
LFloat.L0D5 * (start.X + end.X), LFloat.L0D5 * (start.Y + end.Y),
LFloat.L0D5 * (start.Z + end.Z)
);
RcVec3f axis = new RcVec3f(end.X - start.X, end.Y - start.Y, end.Z - start.Z);
RcVec3f[] normals = new RcVec3f[3];
@@ -32,7 +32,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
RcVec3f trY = new RcVec3f(normals[0].Y, normals[1].Y, normals[2].Y);
RcVec3f trZ = new RcVec3f(normals[0].Z, normals[1].Z, normals[2].Z);
vertices = GenerateCylindricalVertices();
LFloat halfLength = (LFloat)0.5f * axis.Length();
LFloat halfLength = LFloat.L0D5 * axis.Length();
gradient = new LFloat[vertices.Length / 3];
RcVec3f v = new RcVec3f();
for (int i = 0; i < vertices.Length; i += 3)
@@ -54,7 +54,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
v.Y = vertices[i + 1] - center.Y;
v.Z = vertices[i + 2] - center.Z;
v = RcVec3f.Normalize(v);
gradient[i / 3] = LMath.Clamp((LFloat)0.57735026f * (v.X + v.Y + v.Z), -(LFloat)1, (LFloat)1);
gradient[i / 3] = LMath.Clamp(new LFloat("",577) * (v.X + v.Y + v.Z), -LFloat.L1, LFloat.L1);
}
}
}
@@ -62,7 +62,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
private RcVec3f GetSideVector(RcVec3f axis)
{
RcVec3f side = new RcVec3f(1, 0, 0);
if (axis.X > 0.8)
if (axis.X > LFloat.L0D8)
{
side = new RcVec3f(0, 0, 1);
}
@@ -52,7 +52,7 @@ namespace DotRecast.Recast.Toolset.Gizmos
int vi = 0;
for (int r = 0; r < 4; r++)
{
vi = GenerateRingVertices(segments, vertices, vi, LMath.PI * (LFloat)0.5f);
vi = GenerateRingVertices(segments, vertices, vi, LMath.PI * LFloat.L0D5);
}
return vertices;
@@ -67,9 +67,9 @@ namespace DotRecast.Recast.Toolset.Gizmos
LFloat phi = 2 * LMath.PI * p / segments;
LFloat cosPhi = LMath.Cos(phi);
LFloat sinPhi = LMath.Sin(phi);
vertices[vi++] = (LFloat)(sinTheta * cosPhi);
vertices[vi++] = (LFloat)cosTheta;
vertices[vi++] = (LFloat)(sinTheta * sinPhi);
vertices[vi++] = (sinTheta * cosPhi);
vertices[vi++] = cosTheta;
vertices[vi++] = (sinTheta * sinPhi);
}
return vi;
@@ -4,16 +4,16 @@ namespace DotRecast.Recast.Toolset
{
public class RcNavMeshBuildSettings
{
public LFloat cellSize = (LFloat)0.3f;
public LFloat cellHeight = (LFloat)0.2f;
public LFloat cellSize = LFloat.L0D3;
public LFloat cellHeight = LFloat.L0D2;
public LFloat agentHeight = (LFloat)2.0f;
public LFloat agentRadius = (LFloat)0.6f;
public LFloat agentMaxClimb = (LFloat)0.9f;
public LFloat agentMaxSlope = (LFloat)45f;
public LFloat agentHeight = LFloat.L2;
public LFloat agentRadius = LFloat.L0D6;
public LFloat agentMaxClimb = LFloat.L0D9;
public LFloat agentMaxSlope = new LFloat("",45000);
public LFloat agentMaxAcceleration = (LFloat)8.0f;
public LFloat agentMaxSpeed = (LFloat)3.5f;
public LFloat agentMaxAcceleration = LFloat.L8;
public LFloat agentMaxSpeed = new LFloat("",3500);
public int minRegionSize = 8;
public int mergedRegionSize = 20;
@@ -24,12 +24,12 @@ namespace DotRecast.Recast.Toolset
public bool filterLedgeSpans = true;
public bool filterWalkableLowHeightSpans = true;
public LFloat edgeMaxLen = (LFloat)12f;
public LFloat edgeMaxError = (LFloat)1.3f;
public LFloat edgeMaxLen = (new LFloat("",12000));
public LFloat edgeMaxError = (new LFloat("",1300));
public int vertsPerPoly = 6;
public LFloat detailSampleDist = (LFloat)6f;
public LFloat detailSampleMaxError = (LFloat)1f;
public LFloat detailSampleDist = LFloat.L6;
public LFloat detailSampleMaxError = LFloat.L1;
public bool tiled = false;
public int tileSize = 32;
@@ -46,7 +46,7 @@ namespace DotRecast.Recast.Toolset.Tools
// Create
// If clicked on that last pt, create the shape.
if (_pts.Count > 0 && RcVec3f.DistanceSquared(p, _pts[_pts.Count - 1]) < 0.2f * 0.2f)
if (_pts.Count > 0 && RcVec3f.DistanceSquared(p, _pts[_pts.Count - 1]) < LFloat.L0D2 * LFloat.L0D2)
{
pts = new List<RcVec3f>(_pts);
hull = new List<int>(_hull);
@@ -107,7 +107,7 @@ namespace DotRecast.Recast.Toolset.Tools
// Create
// If clicked on that last pt, create the shape.
if (_pts.Count > 0 && RcVec3f.DistanceSquared(p, _pts[^1]) < 0.2f * 0.2f)
if (_pts.Count > 0 && RcVec3f.DistanceSquared(p, _pts[^1]) < LFloat.L0D2 * LFloat.L0D2)
{
//
if (_hull.Count > 2)
@@ -160,7 +160,7 @@ namespace DotRecast.Recast.Toolset.Tools
minh -= boxDescent;
maxh = minh + boxHeight;
if (polyOffset > 0.01f)
if (polyOffset > new LFloat("",10))
{
LFloat[] offset = new LFloat[verts.Length * 2];
int noffset = RcAreas.OffsetPoly(verts, hull.Count, polyOffset, offset, offset.Length);
@@ -78,8 +78,8 @@ namespace DotRecast.Recast.Toolset.Tools
ap.height = agentHeight;
ap.maxAcceleration = agentMaxAcceleration;
ap.maxSpeed = agentMaxSpeed;
ap.collisionQueryRange = ap.radius * (LFloat)12.0f;
ap.pathOptimizationRange = ap.radius * (LFloat)30.0f;
ap.collisionQueryRange = ap.radius * new LFloat("",12000);
ap.pathOptimizationRange = ap.radius * new LFloat("",30000);
ap.updateFlags = _agCfg.GetUpdateFlags();
ap.obstacleAvoidanceType = _agCfg.obstacleAvoidanceType;
ap.separationWeight = _agCfg.separationWeight;
@@ -141,30 +141,30 @@ namespace DotRecast.Recast.Toolset.Tools
_crowd = new DtCrowd(_crowdCfg, _navMesh, __ => new DtQueryDefaultFilter(
SampleAreaModifications.SAMPLE_POLYFLAGS_ALL,
SampleAreaModifications.SAMPLE_POLYFLAGS_DISABLED,
new LFloat[] { (LFloat)1f, (LFloat)10f, (LFloat)1f, (LFloat)1f, (LFloat)2f, (LFloat)1.5f })
new LFloat[] { LFloat.L1, LFloat.L10, LFloat.L1, LFloat.L1, LFloat.L2, new LFloat("",1500) })
);
DtObstacleAvoidanceParams option = new DtObstacleAvoidanceParams(_crowd.GetObstacleAvoidanceParams(0));
// Low (11)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 5;
option.adaptiveRings = 2;
option.adaptiveDepth = 1;
_crowd.SetObstacleAvoidanceParams(0, option);
// Medium (22)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 5;
option.adaptiveRings = 2;
option.adaptiveDepth = 2;
_crowd.SetObstacleAvoidanceParams(1, option);
// Good (45)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 7;
option.adaptiveRings = 2;
option.adaptiveDepth = 3;
_crowd.SetObstacleAvoidanceParams(2, option);
// High (66)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 7;
option.adaptiveRings = 3;
option.adaptiveDepth = 3;
@@ -193,11 +193,11 @@ namespace DotRecast.Recast.Toolset.Tools
{
LFloat tr = _rand.Next();
RcCrowdAgentType type = RcCrowdAgentType.MOB;
LFloat mobsPcnt = _cfg.percentMobs / (LFloat)100f;
LFloat mobsPcnt = _cfg.percentMobs / LFloat.L100;
if (tr > mobsPcnt)
{
tr = _rand.Next();
LFloat travellerPcnt = _cfg.percentTravellers / (LFloat)100f;
LFloat travellerPcnt = _cfg.percentTravellers / LFloat.L100;
if (tr > travellerPcnt)
{
type = RcCrowdAgentType.VILLAGER;
@@ -283,7 +283,7 @@ namespace DotRecast.Recast.Toolset.Tools
var status = navquery.FindNearestPoly(ag.npos, _crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
if (status.Succeeded())
{
status = navquery.FindRandomPointAroundCircle(nearestRef, crowAgentData.home, _cfg.zoneRadius * (LFloat)2f, filter, _rand,
status = navquery.FindRandomPointAroundCircle(nearestRef, crowAgentData.home, _cfg.zoneRadius * LFloat.L2, filter, _rand,
out var randomRef, out var randomPt);
if (status.Succeeded())
{
@@ -298,7 +298,7 @@ namespace DotRecast.Recast.Toolset.Tools
var status = navquery.FindNearestPoly(ag.npos, _crowd.GetQueryExtents(), filter, out var nearestRef, out var nearestPt, out var _);
if (status.Succeeded())
{
status = navquery.FindRandomPointAroundCircle(nearestRef, crowAgentData.home, _cfg.zoneRadius * (LFloat)0.2f, filter, _rand,
status = navquery.FindRandomPointAroundCircle(nearestRef, crowAgentData.home, _cfg.zoneRadius * LFloat.L0D2, filter, _rand,
out var randomRef, out var randomPt);
if (status.Succeeded())
{
@@ -339,7 +339,7 @@ namespace DotRecast.Recast.Toolset.Tools
LFloat dx = ag.targetPos.X - ag.npos.X;
LFloat dy = ag.targetPos.Y - ag.npos.Y;
LFloat dz = ag.targetPos.Z - ag.npos.Z;
return dx * dx + dy * dy + dz * dz < 0.3f;
return dx * dx + dy * dy + dz * dz < LFloat.L0D3;
}
return false;
@@ -9,9 +9,9 @@ namespace DotRecast.Recast.Toolset.Tools
public int agents = 1000;
public int randomSeed = 270;
public int numberOfZones = 4;
public LFloat zoneRadius = (LFloat)20f;
public LFloat percentMobs = (LFloat)80f;
public LFloat percentTravellers = (LFloat)15f;
public LFloat zoneRadius = LFloat.L20;
public LFloat percentMobs = LFloat.L80;
public LFloat percentTravellers = new("",15000);
public int pathQueueSize = 32;
public int maxIterations = 300;
}
@@ -64,7 +64,7 @@ namespace DotRecast.Recast.Toolset.Tools
crowd = new DtCrowd(config, navMesh, __ => new DtQueryDefaultFilter(
SampleAreaModifications.SAMPLE_POLYFLAGS_ALL,
SampleAreaModifications.SAMPLE_POLYFLAGS_DISABLED,
new LFloat[] { (LFloat)1f, (LFloat)10f, (LFloat)1f, (LFloat)1f, (LFloat)2f, (LFloat)1.5f })
new LFloat[] { LFloat.L1, LFloat.L10, LFloat.L1, LFloat.L1, LFloat.L2, new LFloat("",1500) })
);
// Setup local avoidance option to different qualities.
@@ -72,28 +72,28 @@ namespace DotRecast.Recast.Toolset.Tools
DtObstacleAvoidanceParams option = new DtObstacleAvoidanceParams(crowd.GetObstacleAvoidanceParams(0));
// Low (11)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 5;
option.adaptiveRings = 2;
option.adaptiveDepth = 1;
crowd.SetObstacleAvoidanceParams(0, option);
// Medium (22)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 5;
option.adaptiveRings = 2;
option.adaptiveDepth = 2;
crowd.SetObstacleAvoidanceParams(1, option);
// Good (45)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 7;
option.adaptiveRings = 2;
option.adaptiveDepth = 3;
crowd.SetObstacleAvoidanceParams(2, option);
// High (66)
option.velBias = (LFloat)0.5f;
option.velBias = LFloat.L0D5;
option.adaptiveDivs = 7;
option.adaptiveRings = 3;
option.adaptiveDepth = 3;
@@ -205,8 +205,8 @@ namespace DotRecast.Recast.Toolset.Tools
ap.height = agentHeight;
ap.maxAcceleration = agentMaxAcceleration;
ap.maxSpeed = agentMaxSpeed;
ap.collisionQueryRange = ap.radius * (LFloat)12.0f;
ap.pathOptimizationRange = ap.radius * (LFloat)30.0f;
ap.collisionQueryRange = ap.radius * new LFloat("",12000);
ap.pathOptimizationRange = ap.radius * new LFloat("",30000);
ap.updateFlags = _agCfg.GetUpdateFlags();
ap.obstacleAvoidanceType = _agCfg.obstacleAvoidanceType;
ap.separationWeight = _agCfg.separationWeight;
@@ -296,7 +296,7 @@ namespace DotRecast.Recast.Toolset.Tools
private RcVec3f CalcVel(RcVec3f pos, RcVec3f tgt, LFloat speed)
{
RcVec3f vel = RcVec3f.Subtract(tgt, pos);
vel.Y = (LFloat)0.0f;
vel.Y = LFloat.L0;
vel = RcVec3f.Normalize(vel);
return vel.Scale(speed);
}
@@ -62,30 +62,30 @@ namespace DotRecast.Recast.Toolset.Tools
private bool Hit(RcVec3f point, RcVec3f dir, LFloat[] bounds)
{
LFloat cx = (LFloat)0.5f * (bounds[0] + bounds[3]);
LFloat cy = (LFloat)0.5f * (bounds[1] + bounds[4]);
LFloat cz = (LFloat)0.5f * (bounds[2] + bounds[5]);
LFloat dx = (LFloat)0.5f * (bounds[3] - bounds[0]);
LFloat dy = (LFloat)0.5f * (bounds[4] - bounds[1]);
LFloat dz = (LFloat)0.5f * (bounds[5] - bounds[2]);
LFloat cx = LFloat.L0D5 * (bounds[0] + bounds[3]);
LFloat cy = LFloat.L0D5 * (bounds[1] + bounds[4]);
LFloat cz = LFloat.L0D5 * (bounds[2] + bounds[5]);
LFloat dx = LFloat.L0D5 * (bounds[3] - bounds[0]);
LFloat dy = LFloat.L0D5 * (bounds[4] - bounds[1]);
LFloat dz = LFloat.L0D5 * (bounds[5] - bounds[2]);
LFloat rSqr = dx * dx + dy * dy + dz * dz;
LFloat mx = point.X - cx;
LFloat my = point.Y - cy;
LFloat mz = point.Z - cz;
LFloat c = mx * mx + my * my + mz * mz - rSqr;
if (c <= 0.0f)
if (c <= LFloat.L0)
{
return true;
}
LFloat b = mx * dir.X + my * dir.Y + mz * dir.Z;
if (b > 0.0f)
if (b > LFloat.L0)
{
return false;
}
LFloat disc = b * b - c;
return disc >= 0.0f;
return disc >= (LFloat.L0);
}
@@ -168,7 +168,7 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo SphereCollider(RcVec3f p, LFloat walkableClimb)
{
LFloat radius = 1 + (LFloat)random.NextDouble() * 10;
LFloat radius = 1 + random.NextDouble() * 10;
var collider = new DtSphereCollider(p, radius, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = RcGizmoFactory.Sphere(p, radius);
@@ -177,15 +177,15 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo CapsuleCollider(RcVec3f p, LFloat walkableClimb)
{
LFloat radius = (LFloat)0.4f + random.NextDouble() * (LFloat)4f;
LFloat radius = LFloat.L0D4 + random.NextDouble() * LFloat.L4;
RcVec3f a = new RcVec3f(
((LFloat)1f - (LFloat)2f * random.NextDouble()),
(LFloat)0.01f + random.NextDouble(),
((LFloat)1f - 2 * random.NextDouble())
(LFloat.L1 - LFloat.L2 * random.NextDouble()),
(new LFloat("",10)) + random.NextDouble(),
(LFloat.L1 - 2 * random.NextDouble())
);
a = RcVec3f.Normalize(a);
LFloat len = (LFloat)1f + random.NextDouble() * (LFloat)20f;
LFloat len = LFloat.L1 + random.NextDouble() * LFloat.L20;
a.X *= len;
a.Y *= len;
a.Z *= len;
@@ -199,12 +199,12 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo BoxCollider(RcVec3f p, LFloat walkableClimb)
{
RcVec3f extent = new RcVec3f(
(LFloat)0.5f + random.NextDouble() * (LFloat)6f,
(LFloat)0.5f + random.NextDouble() * (LFloat)6f,
(LFloat)0.5f + random.NextDouble() * (LFloat)6f
LFloat.L0D5 + random.NextDouble() * LFloat.L6,
LFloat.L0D5 + random.NextDouble() * LFloat.L6,
LFloat.L0D5 + random.NextDouble() * LFloat.L6
);
RcVec3f forward = new RcVec3f(((LFloat)1f - 2 * (LFloat)random.NextDouble()), 0, ((LFloat)1f - 2 * (LFloat)random.NextDouble()));
RcVec3f up = new RcVec3f(((LFloat)1f - 2 * (LFloat)random.NextDouble()), (LFloat)0.01f + (LFloat)random.NextDouble(), ((LFloat)1f - 2 * (LFloat)random.NextDouble()));
RcVec3f forward = new RcVec3f((LFloat.L1 - 2 * random.NextDouble()), 0, (LFloat.L1 - 2 * random.NextDouble()));
RcVec3f up = new RcVec3f((LFloat.L1 - 2 * random.NextDouble()), (new LFloat("",10)) + random.NextDouble(), (LFloat.L1 - 2 * random.NextDouble()));
RcVec3f[] halfEdges = Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(up, forward, extent);
var collider = new DtBoxCollider(p, halfEdges, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_WATER, walkableClimb);
var gizmo = RcGizmoFactory.Box(p, halfEdges);
@@ -213,10 +213,10 @@ namespace DotRecast.Recast.Toolset.Tools
public RcGizmo CylinderCollider(RcVec3f p, LFloat walkableClimb)
{
LFloat radius = (LFloat)0.7f + (LFloat)random.NextDouble() * (LFloat)4f;
RcVec3f a = new RcVec3f((LFloat)1f - 2 * (LFloat)random.NextDouble(), (LFloat)0.01f + (LFloat)random.NextDouble(), (LFloat)1f - 2 * (LFloat)random.NextDouble());
LFloat radius = LFloat.L0D7 + random.NextDouble() * LFloat.L4;
RcVec3f a = new RcVec3f(LFloat.L1 - 2 * random.NextDouble(), (new LFloat("",10)) + random.NextDouble(), LFloat.L1 - 2 * random.NextDouble());
a = RcVec3f.Normalize(a);
LFloat len = (LFloat)2f + (LFloat)random.NextDouble() * (LFloat)20f;
LFloat len = LFloat.L2 + random.NextDouble() * LFloat.L20;
a.X *= len;
a.Y *= len;
a.Z *= len;
@@ -233,14 +233,14 @@ namespace DotRecast.Recast.Toolset.Tools
RcVec3f baseExtent = new RcVec3f(5, 3, 8);
RcVec3f baseCenter = new RcVec3f(p.X, p.Y + 3, p.Z);
RcVec3f baseUp = new RcVec3f(0, 1, 0);
RcVec3f forward = new RcVec3f(((LFloat)1f - 2 * random.NextDouble()), 0, ((LFloat)1f - 2 * random.NextDouble()));
RcVec3f forward = new RcVec3f((LFloat.L1 - 2 * random.NextDouble()), 0, (LFloat.L1 - 2 * random.NextDouble()));
forward = RcVec3f.Normalize(forward);
RcVec3f side = RcVec3f.Cross(forward, baseUp);
DtBoxCollider @base = new DtBoxCollider(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent),
SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD, walkableClimb);
var roofUp = RcVec3f.Zero;
RcVec3f roofExtent = new RcVec3f((LFloat)4.5f, (LFloat)4.5f, (LFloat)8f);
RcVec3f roofExtent = new RcVec3f((new LFloat("",4500)), (new LFloat("",4500)), LFloat.L8);
var rx = RcMatrix4x4f.CreateFromRotate(45, forward.X, forward.Y, forward.Z);
roofUp = MulMatrixVector(ref roofUp, rx, baseUp);
RcVec3f roofCenter = new RcVec3f(p.X, p.Y + 6, p.Z);
@@ -252,19 +252,19 @@ namespace DotRecast.Recast.Toolset.Tools
baseCenter.Z - forward.Z * 15 + side.Z * 6
);
RcVec3f trunkEnd = new RcVec3f(trunkStart.X, trunkStart.Y + 10, trunkStart.Z);
DtCapsuleCollider trunk = new DtCapsuleCollider(trunkStart, trunkEnd, (LFloat)0.5f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
DtCapsuleCollider trunk = new DtCapsuleCollider(trunkStart, trunkEnd, LFloat.L0D5, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_ROAD,
walkableClimb);
RcVec3f crownCenter = new RcVec3f(
baseCenter.X - forward.X * 15 + side.X * 6, p.Y + 10,
baseCenter.Z - forward.Z * 15 + side.Z * 6
);
DtSphereCollider crown = new DtSphereCollider(crownCenter, (LFloat)4f, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
DtSphereCollider crown = new DtSphereCollider(crownCenter, LFloat.L4, SampleAreaModifications.SAMPLE_POLYAREA_TYPE_GRASS,
walkableClimb);
DtCompositeCollider collider = new DtCompositeCollider(@base, roof, trunk, crown);
IRcGizmoMeshFilter baseGizmo = RcGizmoFactory.Box(baseCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(baseUp, forward, baseExtent));
IRcGizmoMeshFilter roofGizmo = RcGizmoFactory.Box(roofCenter, Detour.Dynamic.Colliders.DtBoxCollider.GetHalfEdges(roofUp, forward, roofExtent));
IRcGizmoMeshFilter trunkGizmo = RcGizmoFactory.Capsule(trunkStart, trunkEnd, (LFloat)0.5f);
IRcGizmoMeshFilter crownGizmo = RcGizmoFactory.Sphere(crownCenter, (LFloat)4f);
IRcGizmoMeshFilter trunkGizmo = RcGizmoFactory.Capsule(trunkStart, trunkEnd, LFloat.L0D5);
IRcGizmoMeshFilter crownGizmo = RcGizmoFactory.Sphere(crownCenter, LFloat.L4);
IRcGizmoMeshFilter gizmo = RcGizmoFactory.Composite(baseGizmo, roofGizmo, trunkGizmo, crownGizmo);
return new RcGizmo(collider, gizmo);
}
@@ -300,8 +300,8 @@ namespace DotRecast.Recast.Toolset.Tools
private LFloat[] TransformVertices(RcVec3f p, DemoInputGeomProvider geom, LFloat ax)
{
var rx = RcMatrix4x4f.CreateFromRotate((LFloat)random.NextDouble() * ax, 1, 0, 0);
var ry = RcMatrix4x4f.CreateFromRotate((LFloat)random.NextDouble() * 360, 0, 1, 0);
var rx = RcMatrix4x4f.CreateFromRotate(random.NextDouble() * ax, 1, 0, 0);
var ry = RcMatrix4x4f.CreateFromRotate(random.NextDouble() * 360, 0, 1, 0);
var m = RcMatrix4x4f.Mul(ref rx, ref ry);
LFloat[] verts = new LFloat[geom.vertices.Length];
RcVec3f v = new RcVec3f();
@@ -313,7 +313,7 @@ namespace DotRecast.Recast.Toolset.Tools
v.Z = geom.vertices[i + 2];
MulMatrixVector(ref vr, m, v);
vr.X += p.X;
vr.Y += p.Y - (LFloat)0.1f;
vr.Y += p.Y - LFloat.L0D1;
vr.Z += p.Z;
verts[i] = vr.X;
verts[i + 1] = vr.Y;
@@ -351,8 +351,8 @@ namespace DotRecast.Recast.Toolset.Tools
public bool Raycast(RcVec3f spos, RcVec3f epos, out LFloat hitPos, out RcVec3f raycastHitPos)
{
RcVec3f sp = new RcVec3f(spos.X, spos.Y + (LFloat)1.3f, spos.Z);
RcVec3f ep = new RcVec3f(epos.X, epos.Y + (LFloat)1.3f, epos.Z);
RcVec3f sp = new RcVec3f(spos.X, spos.Y + (new LFloat("",1300)), spos.Z);
RcVec3f ep = new RcVec3f(epos.X, epos.Y + (new LFloat("",1300)), epos.Z);
bool hasHit = dynaMesh.VoxelQuery().Raycast(sp, ep, out hitPos);
raycastHitPos = hasHit
@@ -72,7 +72,7 @@ namespace DotRecast.Recast.Toolset.Tools
agentHeight,
agentClimb,
cfg.groundTolerance,
-agentRadius * (LFloat)0.2f,
-agentRadius * LFloat.L0D2,
cellSize + 2 * agentRadius + cfg.climbDownDistance,
-cfg.climbDownMaxHeight,
-cfg.climbDownMinHeight,
@@ -90,7 +90,7 @@ namespace DotRecast.Recast.Toolset.Tools
agentHeight,
agentClimb,
cfg.groundTolerance,
-agentRadius * (LFloat)0.2f,
-agentRadius * LFloat.L0D2,
cfg.edgeJumpEndDistance,
-cfg.edgeJumpDownMaxHeight,
cfg.edgeJumpUpMaxHeight,
@@ -26,13 +26,13 @@ namespace DotRecast.Recast.Toolset.Tools
public int buildTypes = JumpLinkType.EDGE_CLIMB_DOWN.Bit | JumpLinkType.EDGE_JUMP.Bit;
public bool buildOffMeshConnections = false;
public LFloat groundTolerance = (LFloat)0.3f;
public LFloat climbDownDistance = (LFloat)0.4f;
public LFloat climbDownMaxHeight = (LFloat)3.2f;
public LFloat climbDownMinHeight = (LFloat)1.5f;
public LFloat edgeJumpEndDistance = (LFloat)2f;
public LFloat edgeJumpHeight = (LFloat)0.4f;
public LFloat edgeJumpDownMaxHeight = (LFloat)2.5f;
public LFloat edgeJumpUpMaxHeight = (LFloat)0.3f;
public LFloat groundTolerance = LFloat.L0D3;
public LFloat climbDownDistance = LFloat.L0D4;
public LFloat climbDownMaxHeight = new("",3200);
public LFloat climbDownMinHeight = new("",1500);
public LFloat edgeJumpEndDistance = LFloat.L2;
public LFloat edgeJumpHeight = LFloat.L0D4;
public LFloat edgeJumpDownMaxHeight = new("",2500);
public LFloat edgeJumpUpMaxHeight = LFloat.L0D3;
}
}
@@ -111,8 +111,8 @@ namespace DotRecast.Recast.Toolset.Tools
if (null == _tc)
return 0;
p.Y -= (LFloat)0.5f;
return _tc.AddObstacle(p, (LFloat)1.0f, (LFloat)2.0f);
p.Y -= LFloat.L0D5;
return _tc.AddObstacle(p, LFloat.L1, LFloat.L2);
}
public DtTileCache GetTileCache()
@@ -52,8 +52,8 @@ namespace DotRecast.Recast.Toolset.Tools
navQuery.ClosestPointOnPoly(startRef, startPt, out var iterPos, out var _);
navQuery.ClosestPointOnPoly(pathIterPolys[pathIterPolys.Count - 1], endPt, out var targetPos, out var _);
LFloat STEP_SIZE = (LFloat)0.5f;
LFloat SLOP = (LFloat)0.01f;
LFloat STEP_SIZE = LFloat.L0D5;
LFloat SLOP = new LFloat("",10);
smoothPath.Clear();
smoothPath.Add(iterPos);
@@ -110,7 +110,7 @@ namespace DotRecast.Recast.Toolset.Tools
}
// Handle end of path and off-mesh links when close enough.
if (endOfPath && DtPathUtils.InRange(iterPos, steerPos, SLOP, (LFloat)1.0f))
if (endOfPath && DtPathUtils.InRange(iterPos, steerPos, SLOP, LFloat.L1))
{
// Reached end of path.
iterPos = targetPos;
@@ -121,7 +121,7 @@ namespace DotRecast.Recast.Toolset.Tools
break;
}
else if (offMeshConnection && DtPathUtils.InRange(iterPos, steerPos, SLOP, (LFloat)1.0f))
else if (offMeshConnection && DtPathUtils.InRange(iterPos, steerPos, SLOP, LFloat.L1))
{
// Reached off-mesh connection.
RcVec3f startPos = RcVec3f.Zero;
@@ -383,21 +383,21 @@ namespace DotRecast.Recast.Toolset.Tools
return DtStatus.DT_FAILURE;
}
LFloat nx = (epos.Z - spos.Z) * (LFloat)0.25f;
LFloat nz = -(epos.X - spos.X) * (LFloat)0.25f;
LFloat nx = (epos.Z - spos.Z) * new LFloat("",250);
LFloat nz = -(epos.X - spos.X) * new LFloat("",250);
var tempQueryPoly = new RcVec3f[4];
tempQueryPoly[0].X = spos.X + nx * (LFloat)1.2f;
tempQueryPoly[0].X = spos.X + nx * (new LFloat("",1200));
tempQueryPoly[0].Y = spos.Y + agentHeight / 2;
tempQueryPoly[0].Z = spos.Z + nz * (LFloat)1.2f;
tempQueryPoly[0].Z = spos.Z + nz * (new LFloat("",1200));
tempQueryPoly[1].X = spos.X - nx * (LFloat)1.3f;
tempQueryPoly[1].X = spos.X - nx * (new LFloat("",1300));
tempQueryPoly[1].Y = spos.Y + agentHeight / 2;
tempQueryPoly[1].Z = spos.Z - nz * (LFloat)1.3f;
tempQueryPoly[1].Z = spos.Z - nz * (new LFloat("",1300));
tempQueryPoly[2].X = epos.X - nx * (LFloat)0.8f;
tempQueryPoly[2].X = epos.X - nx * LFloat.L0D8;
tempQueryPoly[2].Y = epos.Y + agentHeight / 2;
tempQueryPoly[2].Z = epos.Z - nz * (LFloat)0.8f;
tempQueryPoly[2].Z = epos.Z - nz * LFloat.L0D8;
tempQueryPoly[3].X = epos.X + nx;
tempQueryPoly[3].Y = epos.Y + agentHeight / 2;
@@ -80,7 +80,7 @@ namespace DotRecast.Recast.Geom
LFloat d = LMath.Sqrt(normals[i] * normals[i] + normals[i + 1] * normals[i + 1] + normals[i + 2] * normals[i + 2]);
if (d > 0)
{
d = (LFloat)1.0f / d;
d = LFloat.L1 / d;
normals[i] *= d;
normals[i + 1] *= d;
normals[i + 2] *= d;
@@ -116,7 +116,7 @@ namespace DotRecast.Recast.Geom
public bool RaycastMesh(RcVec3f src, RcVec3f dst, out LFloat tmin)
{
tmin = (LFloat)1.0f;
tmin = LFloat.L1;
// Prune hit ray.
if (!RcIntersections.IsectSegAABB(src, dst, bmin, bmax, out var btmin, out var btmax))
@@ -137,7 +137,7 @@ namespace DotRecast.Recast.Geom
return false;
}
tmin = (LFloat)1.0f;
tmin = LFloat.L1;
bool hit = false;
foreach (RcChunkyTriMeshNode chunk in chunks)
{
@@ -273,7 +273,7 @@ namespace DotRecast.Recast.Geom
else
{
// Compute intersection t value of ray with near and far plane of slab
LFloat ood = (LFloat)1.0f / d.Get(i);
LFloat ood = LFloat.L1 / d.Get(i);
LFloat t1 = (bmin.Get(i) - p.Get(i)) * ood;
LFloat t2 = (bmax.Get(i) - p.Get(i)) * ood;
if (t1 > t2)
@@ -167,7 +167,7 @@ namespace DotRecast.Recast.Geom
LFloat d = LMath.Sqrt(normals[i] * normals[i] + normals[i + 1] * normals[i + 1] + normals[i + 2] * normals[i + 2]);
if (d > 0)
{
d = (LFloat)1.0f / d;
d = LFloat.L1 / d;
normals[i] *= d;
normals[i + 1] *= d;
normals[i + 2] *= d;
@@ -541,9 +541,9 @@ namespace DotRecast.Recast
}
RcVec3f point = new RcVec3f(
compactHeightfield.bmin.X + (x + (LFloat)0.5f) * compactHeightfield.cs,
compactHeightfield.bmin.X + (x + LFloat.L0D5) * compactHeightfield.cs,
0,
compactHeightfield.bmin.Z + (z + (LFloat)0.5f) * compactHeightfield.cs
compactHeightfield.bmin.Z + (z + LFloat.L0D5) * compactHeightfield.cs
);
if (PointInPoly(verts, point))
@@ -648,8 +648,8 @@ namespace DotRecast.Recast
ref RcCompactCell cell = ref compactHeightfield.cells[x + z * zStride];
int maxSpanIndex = cell.index + cell.count;
LFloat cellX = compactHeightfield.bmin.X + ((LFloat)x + (LFloat)0.5f) * compactHeightfield.cs;
LFloat cellZ = compactHeightfield.bmin.Z + ((LFloat)z + (LFloat)0.5f) * compactHeightfield.cs;
LFloat cellX = compactHeightfield.bmin.X + (x.ToLFloat() + LFloat.L0D5) * compactHeightfield.cs;
LFloat cellZ = compactHeightfield.bmin.Z + (z.ToLFloat() + LFloat.L0D5) * compactHeightfield.cs;
LFloat deltaX = cellX - position[0];
LFloat deltaZ = cellZ - position[2];
@@ -744,7 +744,7 @@ namespace DotRecast.Recast
{
// Defines the limit at which a miter becomes a bevel.
// Similar in behavior to https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit
LFloat MITER_LIMIT = (LFloat)1.20f;
LFloat MITER_LIMIT = new LFloat("",1200);
int numOutVerts = 0;
@@ -784,23 +784,23 @@ namespace DotRecast.Recast
// Average the two segment normals to get the proportional miter offset for B.
// This isn't normalized because it's defining the distance and direction the corner will need to be
// adjusted proportionally to the edge offsets to properly miter the adjoining edges.
LFloat cornerMiterX = (prevSegmentNormX + currSegmentNormX) * (LFloat)0.5f;
LFloat cornerMiterZ = (prevSegmentNormZ + currSegmentNormZ) * (LFloat)0.5f;
LFloat cornerMiterX = (prevSegmentNormX + currSegmentNormX) * LFloat.L0D5;
LFloat cornerMiterZ = (prevSegmentNormZ + currSegmentNormZ) * LFloat.L0D5;
LFloat cornerMiterSqMag = RcMath.Sqr(cornerMiterX) + RcMath.Sqr(cornerMiterZ);
// If the magnitude of the segment normal average is less than about .69444,
// the corner is an acute enough angle that the result should be beveled.
bool bevel = cornerMiterSqMag * MITER_LIMIT * MITER_LIMIT < 1.0f;
bool bevel = cornerMiterSqMag * MITER_LIMIT * MITER_LIMIT < LFloat.L1;
// Scale the corner miter so it's proportional to how much the corner should be offset compared to the edges.
if (cornerMiterSqMag > RcVecUtils.Epsilon)
{
LFloat scale = (LFloat)1.0f / cornerMiterSqMag;
LFloat scale = LFloat.L1 / cornerMiterSqMag;
cornerMiterX *= scale;
cornerMiterZ *= scale;
}
if (bevel && cross < 0.0f) // If the corner is convex and an acute enough angle, generate a bevel.
if (bevel && cross < (LFloat.L0)) // If the corner is convex and an acute enough angle, generate a bevel.
{
if (numOutVerts + 2 > maxOutVerts)
{
@@ -809,7 +809,7 @@ namespace DotRecast.Recast
// Generate two bevel vertices at a distances from B proportional to the angle between the two segments.
// Move each bevel vertex out proportional to the given offset.
LFloat d = ((LFloat)1.0f - (prevSegmentDir.X * currSegmentDir.X + prevSegmentDir.Z * currSegmentDir.Z)) * (LFloat)0.5f;
LFloat d = (LFloat.L1 - (prevSegmentDir.X * currSegmentDir.X + prevSegmentDir.Z * currSegmentDir.Z)) * LFloat.L0D5;
outVerts[numOutVerts * 3 + 0] = vertB.X + (-prevSegmentNormX + prevSegmentDir.X * d) * offset;
outVerts[numOutVerts * 3 + 1] = vertB.Y;
@@ -101,8 +101,8 @@ namespace DotRecast.Recast
public static void CalcGridSize(RcVec3f bmin, RcVec3f bmax, LFloat cs, out int sizeX, out int sizeZ)
{
sizeX = (int)((bmax.X - bmin.X) / cs + 0.5f);
sizeZ = (int)((bmax.Z - bmin.Z) / cs + 0.5f);
sizeX = (int)((bmax.X - bmin.X) / cs + LFloat.L0D5);
sizeZ = (int)((bmax.Z - bmin.Z) / cs + LFloat.L0D5);
}
@@ -123,7 +123,7 @@ namespace DotRecast.Recast
public static int[] MarkWalkableTriangles(RcContext ctx, LFloat walkableSlopeAngle, LFloat[] verts, int[] tris, int nt, RcAreaModification areaMod)
{
int[] areas = new int[nt];
LFloat walkableThr = LMath.Cos(walkableSlopeAngle / (LFloat)180.0f * LMath.PI);
LFloat walkableThr = LMath.Cos(walkableSlopeAngle / LFloat.L180 * LMath.PI);
RcVec3f norm = new RcVec3f();
for (int i = 0; i < nt; ++i)
{
@@ -156,7 +156,7 @@ namespace DotRecast.Recast
/// @see rcHeightfield, rcClearUnwalkableTriangles, rcRasterizeTriangles
public static void ClearUnwalkableTriangles(RcContext ctx, LFloat walkableSlopeAngle, LFloat[] verts, int nv, int[] tris, int nt, int[] areas)
{
LFloat walkableThr = LMath.Cos(walkableSlopeAngle / (LFloat)180.0f * LMath.PI);
LFloat walkableThr = LMath.Cos(walkableSlopeAngle / LFloat.L180 * LMath.PI);
RcVec3f norm = new RcVec3f();
@@ -175,7 +175,7 @@ namespace DotRecast.Recast
MaxEdgeLenWorld = edgeMaxLen;
MaxSimplificationError = edgeMaxError;
MaxVertsPerPoly = vertsPerPoly;
DetailSampleDist = detailSampleDist < 0.9f ? 0 : cellSize * detailSampleDist;
DetailSampleDist = detailSampleDist < LFloat.L0D9 ? 0 : cellSize * detailSampleDist;
DetailSampleMaxError = cellHeight * detailSampleMaxError;
WalkableAreaMod = walkableAreaMod;
FilterLowHangingObstacles = filterLowHangingObstacles;
@@ -28,7 +28,7 @@ namespace DotRecast.Recast
{
public static class RcFilledVolumeRasterization
{
private static LFloat EPSILON = (LFloat)0.0001f;
private static LFloat EPSILON = LFloat.EPS_1MS;
private static readonly int[] BOX_EDGES = new[] { 0, 1, 0, 2, 0, 4, 1, 3, 1, 5, 2, 3, 2, 6, 3, 7, 4, 5, 4, 6, 5, 7, 6, 7 };
public static void RasterizeSphere(RcHeightfield hf, RcVec3f center, LFloat radius, int area, int flagMergeThr, RcContext ctx)
@@ -92,9 +92,9 @@ namespace DotRecast.Recast
};
for (int i = 0; i < 8; ++i)
{
LFloat s0 = (i & 1) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s1 = (i & 2) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s2 = (i & 4) != 0 ? (LFloat)1f : -(LFloat)1f;
LFloat s0 = (i & 1) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s1 = (i & 2) != 0 ? LFloat.L1 : -LFloat.L1;
LFloat s2 = (i & 4) != 0 ? LFloat.L1 : -LFloat.L1;
vertices[i * 3 + 0] = center.X + s0 * halfEdges[0].X + s1 * halfEdges[1].X + s2 * halfEdges[2].X;
vertices[i * 3 + 1] = center.Y + s0 * halfEdges[0].Y + s1 * halfEdges[1].Y + s2 * halfEdges[2].Y;
vertices[i * 3 + 2] = center.Z + s0 * halfEdges[0].Z + s1 * halfEdges[1].Z + s2 * halfEdges[2].Z;
@@ -151,14 +151,14 @@ namespace DotRecast.Recast
Plane(planes, i + 1, planes[i], bc, vertices, b);
Plane(planes, i + 2, planes[i], ca, vertices, c);
LFloat s = (LFloat)1.0f / (vertices[a] * planes[i + 1][0] + vertices[a + 1] * planes[i + 1][1]
LFloat s = LFloat.L1 / (vertices[a] * planes[i + 1][0] + vertices[a + 1] * planes[i + 1][1]
+ vertices[a + 2] * planes[i + 1][2] - planes[i + 1][3]);
planes[i + 1][0] *= s;
planes[i + 1][1] *= s;
planes[i + 1][2] *= s;
planes[i + 1][3] *= s;
s = (LFloat)1.0f / (vertices[b] * planes[i + 2][0] + vertices[b + 1] * planes[i + 2][1] + vertices[b + 2] * planes[i + 2][2]
s = LFloat.L1 / (vertices[b] * planes[i + 2][0] + vertices[b + 1] * planes[i + 2][1] + vertices[b + 2] * planes[i + 2][2]
- planes[i + 2][3]);
planes[i + 2][0] *= s;
planes[i + 2][1] *= s;
@@ -199,8 +199,8 @@ namespace DotRecast.Recast
return;
}
LFloat ics = (LFloat)1.0f / hf.cs;
LFloat ich = (LFloat)1.0f / hf.ch;
LFloat ics = LFloat.L1 / hf.cs;
LFloat ich = LFloat.L1 / hf.ch;
int xMin = (int)((bounds[0] - hf.bmin.X) * ics);
int zMin = (int)((bounds[2] - hf.bmin.Z) * ics);
int xMax = LMath.Min(hf.width - 1, (int)((bounds[3] - hf.bmin.X) * ics));
@@ -243,13 +243,13 @@ namespace DotRecast.Recast
LFloat b = my; // Dot(m, d) d = (0, 1, 0)
LFloat c = LenSqr(mx, my, mz) - radiusSqr;
if (c > 0.0f && b > 0.0f)
if (c > (LFloat.L0) && b > (LFloat.L0))
{
return null;
}
LFloat discr = b * b - c;
if (discr < 0.0f)
if (discr < (LFloat.L0))
{
return null;
}
@@ -258,9 +258,9 @@ namespace DotRecast.Recast
LFloat tmin = -b - discrSqrt;
LFloat tmax = -b + discrSqrt;
if (tmin < 0.0f)
if (tmin < (LFloat.L0))
{
tmin = (LFloat)0.0f;
tmin = LFloat.L0;
}
return new LFloat[] { y + tmin, y + tmax };
@@ -437,7 +437,7 @@ namespace DotRecast.Recast
if (LMath.Abs(a) < EPSILON)
{
// Segment runs parallel to cylinder axis
if (c > 0.0f)
if (c > (LFloat.L0))
{
return null; // a and thus the segment lie outside cylinder
}
@@ -450,7 +450,7 @@ namespace DotRecast.Recast
LFloat b = dd * mn - nd * md;
LFloat discr = b * b - a * c;
if (discr < 0.0f)
if (discr < (LFloat.L0))
{
return null; // No real roots; no intersection
}
@@ -459,11 +459,11 @@ namespace DotRecast.Recast
LFloat t1 = (-b - discSqrt) / a;
LFloat t2 = (-b + discSqrt) / a;
if (md + t1 * nd < 0.0f)
if (md + t1 * nd < (LFloat.L0))
{
// Intersection outside cylinder on p side
t1 = -md / nd;
if (k + t1 * (2 * mn + t1 * nn) > 0.0f)
if (k + t1 * (2 * mn + t1 * nn) > (LFloat.L0))
{
return null;
}
@@ -472,17 +472,17 @@ namespace DotRecast.Recast
{
// Intersection outside cylinder on q side
t1 = (dd - md) / nd;
if (k + dd - 2 * md + t1 * (2 * (mn - nd) + t1 * nn) > 0.0f)
if (k + dd - 2 * md + t1 * (2 * (mn - nd) + t1 * nn) > (LFloat.L0))
{
return null;
}
}
if (md + t2 * nd < 0.0f)
if (md + t2 * nd < (LFloat.L0))
{
// Intersection outside cylinder on p side
t2 = -md / nd;
if (k + t2 * (2 * mn + t2 * nn) > 0.0f)
if (k + t2 * (2 * mn + t2 * nn) > (LFloat.L0))
{
return null;
}
@@ -491,7 +491,7 @@ namespace DotRecast.Recast
{
// Intersection outside cylinder on q side
t2 = (dd - md) / nd;
if (k + dd - 2 * md + t2 * (2 * (mn - nd) + t2 * nn) > 0.0f)
if (k + dd - 2 * md + t2 * (2 * (mn - nd) + t2 * nn) > (LFloat.L0))
{
return null;
}
@@ -705,7 +705,7 @@ namespace DotRecast.Recast
}
}
iy = (LFloat)0.0f;
iy = LFloat.L0;
return false;
}
@@ -723,29 +723,29 @@ namespace DotRecast.Recast
}
}
iy = (LFloat)0.0f;
iy = LFloat.L0;
return false;
}
private static bool RayTriangleIntersection(RcVec3f point, int plane, LFloat[][] planes, out LFloat y)
{
y = (LFloat)0.0f;
y = LFloat.L0;
LFloat t = (planes[plane][3] - RcVecUtils.Dot(planes[plane], point)) / planes[plane][1];
LFloat[] s = { point.X, point.Y + t, point.Z };
LFloat u = RcVecUtils.Dot(s, planes[plane + 1]) - planes[plane + 1][3];
if (u < 0.0f || u > 1.0f)
if (u < (LFloat.L0) || u > LFloat.L1)
{
return false;
}
LFloat v = RcVecUtils.Dot(s, planes[plane + 2]) - planes[plane + 2][3];
if (v < 0.0f)
if (v < (LFloat.L0))
{
return false;
}
LFloat w = (LFloat)1f - u - v;
if (w < 0.0f)
LFloat w = LFloat.L1 - u - v;
if (w < (LFloat.L0))
{
return false;
}
@@ -551,7 +551,7 @@ namespace DotRecast.Recast
// Update height so that it matches on both sides of the portal.
ref RcCompactSpan @as = ref chf.spans[ai];
if (@as.y > hmin)
layer.heights[idx] = LMath.Max(layer.heights[idx], (LFloat)(char)(@as.y - hmin));
layer.heights[idx] = LMath.Max(layer.heights[idx], (@as.y - hmin).ToLFloat());
}
// Valid connection mask
@@ -180,7 +180,7 @@ namespace DotRecast.Recast
}
c = RcVecUtils.Create(verts, p1);
r.Exchange((LFloat)0f);
r.Exchange(LFloat.L0);
return false;
}
@@ -197,7 +197,7 @@ namespace DotRecast.Recast
LFloat dot12 = Vdot2(v1, v2);
// Compute barycentric coordinates
LFloat invDenom = (LFloat)1.0f / (dot00 * dot11 - dot01 * dot01);
LFloat invDenom = LFloat.L1 / (dot00 * dot11 - dot01 * dot01);
LFloat u = (dot11 * dot02 - dot01 * dot12) * invDenom;
LFloat v = (dot00 * dot12 - dot01 * dot02) * invDenom;
@@ -346,8 +346,8 @@ namespace DotRecast.Recast
private static int GetHeight(LFloat fx, LFloat fy, LFloat fz, LFloat cs, LFloat ics, LFloat ch, int radius,
RcHeightPatch hp)
{
int ix = (int)LMath.Floor(fx * ics + (LFloat)0.01f);
int iz = (int)LMath.Floor(fz * ics + (LFloat)0.01f);
int ix = (int)LMath.Floor(fx * ics + (new LFloat("",10)));
int iz = (int)LMath.Floor(fz * ics + (new LFloat("",10)));
ix = LMath.Clamp(ix - hp.xmin, 0, hp.width - 1);
iz = LMath.Clamp(iz - hp.ymin, 0, hp.height - 1);
int h = hp.data[ix + iz * hp.width];
@@ -474,11 +474,11 @@ namespace DotRecast.Recast
{
LFloat a1 = Vcross2(verts, a, b, d);
LFloat a2 = Vcross2(verts, a, b, c);
if (a1 * a2 < 0.0f)
if (a1 * a2 < (LFloat.L0))
{
LFloat a3 = Vcross2(verts, c, d, a);
LFloat a4 = a3 + a2 - a1;
if (a3 * a4 < 0.0f)
if (a3 * a4 < (LFloat.L0))
{
return true;
}
@@ -535,7 +535,7 @@ namespace DotRecast.Recast
// Find best point on left of edge.
int pt = npts;
RcVec3f c = new RcVec3f();
RcAtomicFloat r = new RcAtomicFloat(-(LFloat)1f);
RcAtomicFloat r = new RcAtomicFloat(-LFloat.L1);
for (int u = 0; u < npts; ++u)
{
if (u == s || u == t)
@@ -554,7 +554,7 @@ namespace DotRecast.Recast
}
LFloat d = Vdist2(c, pts, u * 3);
LFloat tol = (LFloat)0.001f;
LFloat tol = LFloat.EPS_1MS;
if (d > r.Get() * (1 + tol))
{
// Outside current circumcircle, skip.
@@ -821,12 +821,12 @@ namespace DotRecast.Recast
private static LFloat GetJitterX(int i)
{
return (((i * 0x8da6b343) & 0xffff) / (LFloat)65535.0f * (LFloat)2.0f) - (LFloat)1.0f;
return (((i * 0x8da6b343) & 0xffff) / 65535.ToLFloat() * LFloat.L2) - LFloat.L1;
}
private static LFloat GetJitterY(int i)
{
return (((i * 0xd8163841) & 0xffff) / (LFloat)65535.0f * (LFloat)2.0f) - (LFloat)1.0f;
return (((i * 0xd8163841) & 0xffff) / 65535.ToLFloat() * LFloat.L2) - LFloat.L1;
}
static int BuildPolyDetail(RcContext ctx, LFloat[] @in, int nin, LFloat sampleDist, LFloat sampleMaxError,
@@ -849,7 +849,7 @@ namespace DotRecast.Recast
tris.Clear();
LFloat cs = chf.cs;
LFloat ics = (LFloat)1.0f / cs;
LFloat ics = LFloat.L1 / cs;
// Calculate minimum extents of the polygon based on input data.
LFloat minExtent = PolyMinExtent(verts, nverts);
@@ -901,7 +901,7 @@ namespace DotRecast.Recast
for (int k = 0; k <= nn; ++k)
{
LFloat u = (LFloat)k / (LFloat)nn;
LFloat u = k.ToLFloat() / nn.ToLFloat();
int pos = k * 3;
edge[pos + 0] = @in[vj + 0] + dx * u;
edge[pos + 1] = @in[vj + 1] + dy * u;
@@ -1017,7 +1017,7 @@ namespace DotRecast.Recast
{
RcVec3f pt = new RcVec3f();
pt.X = x * sampleDist;
pt.Y = (bmax.Y + bmin.Y) * (LFloat)0.5f;
pt.Y = (bmax.Y + bmin.Y) * LFloat.L0D5;
pt.Z = z * sampleDist;
// Make sure the samples are not too close to the edges.
if (DistToPoly(nin, @in, pt) > -sampleDist / 2)
@@ -1058,9 +1058,9 @@ namespace DotRecast.Recast
RcVec3f pt = new RcVec3f();
// The sample location is jittered to get rid of some bad triangulations
// which are cause by symmetrical data from the grid structure.
pt.X = samples[s + 0] * sampleDist + GetJitterX(i) * cs * (LFloat)0.1f;
pt.X = samples[s + 0] * sampleDist + GetJitterX(i) * cs * LFloat.L0D1;
pt.Y = samples[s + 1] * chf.ch;
pt.Z = samples[s + 2] * sampleDist + GetJitterY(i) * cs * (LFloat)0.1f;
pt.Z = samples[s + 2] * sampleDist + GetJitterY(i) * cs * LFloat.L0D1;
LFloat d = DistToTriMesh(pt, verts, nverts, tris, tris.Count / 4);
if (d < 0)
{
@@ -1440,7 +1440,7 @@ namespace DotRecast.Recast
LFloat ch = mesh.ch;
RcVec3f orig = mesh.bmin;
int borderSize = mesh.borderSize;
int heightSearchRadius = (int)LMath.Max((LFloat)1, LMath.Ceiling(mesh.maxEdgeError));
int heightSearchRadius = (int)LMath.Max(LFloat.L1, LMath.Ceiling(mesh.maxEdgeError));
List<int> tris = new List<int>(512);
LFloat[] verts = new LFloat[256 * 3];
@@ -1261,13 +1261,13 @@ namespace DotRecast.Recast
{
RcPolyMesh pmesh = meshes[i];
int ox = (int)LMath.Floor((pmesh.bmin.X - mesh.bmin.X) / mesh.cs + (LFloat)0.5f);
int oz = (int)LMath.Floor((pmesh.bmin.Z - mesh.bmin.Z) / mesh.cs + (LFloat)0.5f);
int ox = (int)LMath.Floor((pmesh.bmin.X - mesh.bmin.X) / mesh.cs + LFloat.L0D5);
int oz = (int)LMath.Floor((pmesh.bmin.Z - mesh.bmin.Z) / mesh.cs + LFloat.L0D5);
bool isMinX = (ox == 0);
bool isMinZ = (oz == 0);
bool isMaxX = (LMath.Floor((mesh.bmax.X - pmesh.bmax.X) / mesh.cs + (LFloat)0.5f)) == 0;
bool isMaxZ = (LMath.Floor((mesh.bmax.Z - pmesh.bmax.Z) / mesh.cs + (LFloat)0.5f)) == 0;
bool isMaxX = (LMath.Floor((mesh.bmax.X - pmesh.bmax.X) / mesh.cs + LFloat.L0D5)) == 0;
bool isMaxZ = (LMath.Floor((mesh.bmax.Z - pmesh.bmax.Z) / mesh.cs + LFloat.L0D5)) == 0;
bool isOnBorder = (isMinX || isMinZ || isMaxX || isMaxZ);
for (int j = 0; j < pmesh.nverts; ++j)
@@ -28,7 +28,7 @@ namespace DotRecast.Recast
{
public static bool Raycast(IList<RcBuilderResult> results, RcVec3f src, RcVec3f dst, out LFloat hitTime)
{
hitTime = (LFloat)0.0f;
hitTime = LFloat.L0;
foreach (RcBuilderResult result in results)
{
if (result.MeshDetail != null)
@@ -402,7 +402,7 @@ namespace DotRecast.Recast
spanMax -= heightfieldBBMin.Y;
// Skip the span if it is outside the heightfield bbox
if (spanMax < 0.0f)
if (spanMax < (LFloat.L0))
{
continue;
}
@@ -413,7 +413,7 @@ namespace DotRecast.Recast
}
// Clamp the span to the heightfield bbox.
if (spanMin < 0.0f)
if (spanMin < (LFloat.L0))
{
spanMin = 0;
}
@@ -457,8 +457,8 @@ namespace DotRecast.Recast
using var timer = context.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES);
// Rasterize the single triangle.
LFloat inverseCellSize = (LFloat)1.0f / heightfield.cs;
LFloat inverseCellHeight = (LFloat)1.0f / heightfield.ch;
LFloat inverseCellSize = LFloat.L1 / heightfield.cs;
LFloat inverseCellHeight = LFloat.L1 / heightfield.ch;
RasterizeTri(verts, v0, v1, v2, areaID, heightfield, heightfield.bmin, heightfield.bmax, heightfield.cs, inverseCellSize,
inverseCellHeight, flagMergeThreshold);
}
@@ -484,8 +484,8 @@ namespace DotRecast.Recast
{
using var timer = context.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES);
LFloat inverseCellSize = (LFloat)1.0f / heightfield.cs;
LFloat inverseCellHeight = (LFloat)1.0f / heightfield.ch;
LFloat inverseCellSize = LFloat.L1 / heightfield.cs;
LFloat inverseCellHeight = LFloat.L1 / heightfield.ch;
for (int triIndex = 0; triIndex < numTris; ++triIndex)
{
int v0 = tris[triIndex * 3 + 0];
@@ -516,8 +516,8 @@ namespace DotRecast.Recast
{
using var timer = context.ScopedTimer(RcTimerLabel.RC_TIMER_RASTERIZE_TRIANGLES);
LFloat inverseCellSize = (LFloat)1.0f / heightfield.cs;
LFloat inverseCellHeight = (LFloat)1.0f / heightfield.ch;
LFloat inverseCellSize = LFloat.L1 / heightfield.cs;
LFloat inverseCellHeight = LFloat.L1 / heightfield.ch;
for (int triIndex = 0; triIndex < numTris; ++triIndex)
{
int v0 = (triIndex * 3 + 0);
@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 77439ffa9cec4759849d22cb0349256d
timeCreated: 1715343409
@@ -27,9 +27,5 @@ namespace JNGame.Math
return new LFloat(true, (long)(value * LFloat.Precision));
}
public static LFloat Abs(this LFloat val)
{
return LMath.Abs(val);
}
}
}
@@ -23,8 +23,9 @@ namespace JNGame.Math
/// 定点数精度
/// </summary>
public const long Precision = 1000000L;
/// <summary>
/// 精度缩小1000
/// 精度缩小10倍
/// </summary>
public const int RateOfOldPrecision = (int)(Precision / 1000L);
/// <summary>
@@ -183,8 +184,43 @@ namespace JNGame.Math
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static LFloat operator *(in LFloat a, in LFloat b)
{
long val = a.rawValue * b.rawValue;
return new LFloat(true, val / LFloat.Precision);
// ------------------- 这个会越界 -------------------
// // 安全地进行乘法
// long val = a.rawValue * b.rawValue;
// return new LFloat(true, val / Precision);
// ------------------- 这个精度差 -------------------
// long scaleDownFactor = 100;
//
// // 将 a 和 b 的值除以缩放因子,得到缩放后的值
// long scaledA = a.rawValue / scaleDownFactor;
// long scaledB = b.rawValue / scaleDownFactor;
//
// // 计算缩放后值的乘积
// long scaledProduct = scaledA * scaledB;
//
// // 返回计算得到的定点数结果
// return new LFloat(true, scaledProduct / 100);
// ------------------- 这个性能差 -------------------
// 分解 a 和 b 的值为高位和低位
long aHigh = a.rawValue / Precision; // a 的整数部分
long aLow = a.rawValue % Precision; // a 的小数部分
long bHigh = b.rawValue / Precision; // b 的整数部分
long bLow = b.rawValue % Precision; // b 的小数部分
// 计算各部分的乘积,避免直接相乘导致溢出
long highHigh = aHigh * bHigh * Precision; // 整数部分
long lowHigh = aLow * bHigh; // a 的小数部分 × b 的整数部分
long highLow = aHigh * bLow; // a 的整数部分 × b 的小数部分
long lowLow = aLow * bLow / Precision; // 小数部分的乘积再缩放
// 合并所有部分,得到最终结果
long result = highHigh + lowHigh + highLow + lowLow;
// 返回结果
return new LFloat(true, result);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -463,7 +499,8 @@ namespace JNGame.Math
#if DEBUG_DUMP
return _val.ToString();
#else
var val = (rawValue * LFloat.PrecisionFactor);
// var val = (rawValue * LFloat.PrecisionFactor);
var val = (rawValue * 0.000001f);
// 限制4位小数
// val = (int)System.Math.Round((double)val * 10000) / 10000f;
return val.ToString("f4");
@@ -620,7 +657,7 @@ namespace JNGame.Math
/// <summary>
/// 毫秒单位时间 = 0.001f
/// </summary>
public static readonly LFloat EPS_1MS = new LFloat(null, 1L);
public static readonly LFloat EPS_1MS = new LFloat("", 1L);
/// <summary>
@@ -628,11 +665,51 @@ namespace JNGame.Math
/// </summary>
public static LFloat L0 => 0.ToLFloat();
/// <summary>
/// 0.1
/// </summary>
public static LFloat L0D1 => new("",100);
/// <summary>
/// 0.2
/// </summary>
public static LFloat L0D2 => new("",200);
/// <summary>
/// 0.3
/// </summary>
public static LFloat L0D3 => new("",300);
/// <summary>
/// 0.4
/// </summary>
public static LFloat L0D4 => new("",400);
/// <summary>
/// 0.5
/// </summary>
public static LFloat L0D5 => new("",500);
/// <summary>
/// 0.6
/// </summary>
public static LFloat L0D6 => new("",600);
/// <summary>
/// 0.7
/// </summary>
public static LFloat L0D7 => new("",700);
/// <summary>
/// 0.8
/// </summary>
public static LFloat L0D8 => new("",800);
/// <summary>
/// 0.9
/// </summary>
public static LFloat L0D9 => new("",900);
/// <summary>
/// 1
/// </summary>
@@ -643,11 +720,41 @@ namespace JNGame.Math
/// </summary>
public static readonly LFloat L2 = 2.ToLFloat();
/// <summary>
/// 3
/// </summary>
public static readonly LFloat L3 = 3.ToLFloat();
/// <summary>
/// 4
/// </summary>
public static readonly LFloat L4 = 4.ToLFloat();
/// <summary>
/// 5
/// </summary>
public static readonly LFloat L5 = 5.ToLFloat();
/// <summary>
/// 6
/// </summary>
public static readonly LFloat L6 = 6.ToLFloat();
/// <summary>
/// 7
/// </summary>
public static readonly LFloat L7 = 7.ToLFloat();
/// <summary>
/// 8
/// </summary>
public static readonly LFloat L8 = 8.ToLFloat();
/// <summary>
/// 9
/// </summary>
public static readonly LFloat L9 = 9.ToLFloat();
/// <summary>
/// 10
/// </summary>
@@ -658,11 +765,31 @@ namespace JNGame.Math
/// </summary>
public static readonly LFloat L20 = 20.ToLFloat();
/// <summary>
/// 50
/// </summary>
public static readonly LFloat L50 = 50.ToLFloat();
/// <summary>
/// 20
/// </summary>
public static readonly LFloat L80 = 80.ToLFloat();
/// <summary>
/// 100
/// </summary>
public static readonly LFloat L100 = 100.ToLFloat();
/// <summary>
/// 180
/// </summary>
public static readonly LFloat L180 = 180.ToLFloat();
/// <summary>
/// 255
/// </summary>
public static readonly LFloat L255 = 255.ToLFloat();
/// <summary>
/// 1000
/// </summary>
@@ -47,10 +47,10 @@ namespace JNGame.Math
/// <param name="w"></param>
public LQuaternion(bool isRawValue, long x, long y, long z, long w)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.w = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.z = LFloat.L0;
this.w = LFloat.L0;
this.x.rawValue = x;
this.y.rawValue = y;
this.z.rawValue = z;
@@ -37,8 +37,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(bool isUseRawVal, int x, int y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x.rawValue = x;
this.y.rawValue = y;
}
@@ -51,8 +51,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(bool isUseRawVal, long x, long y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x.rawValue = x;
this.y.rawValue = y;
}
@@ -64,8 +64,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(int x, int y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x.rawValue = x * LFloat.Precision;
this.y.rawValue = y * LFloat.Precision;
}
@@ -77,8 +77,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(long x, long y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x.rawValue = x * LFloat.Precision;
this.y.rawValue = y * LFloat.Precision;
}
@@ -90,8 +90,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(LFloat x, LFloat y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x = x;
this.y = y;
}
@@ -105,8 +105,8 @@ namespace JNGame.Math
/// <param name="y"></param>
public LVector2(bool shouldOnlyUseInEditor, float x, float y)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.x = LFloat.L0;
this.y = LFloat.L0;
this.x.rawValue = (long)(x * LFloat.Precision);
this.y.rawValue = (long)(y * LFloat.Precision);
}
@@ -45,9 +45,9 @@ namespace JNGame.Math
/// <param name="z"></param>
public LVector3(bool isUseRawVal, int x, int y, int z)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.x = 0.ToLFloat();
this.y = 0.ToLFloat();
this.z = 0.ToLFloat();
this.x.rawValue = x;
this.y.rawValue = y;
this.z.rawValue = z;
@@ -62,9 +62,9 @@ namespace JNGame.Math
/// <param name="z"></param>
public LVector3(bool isUseRawVal, long x, long y, long z)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.x = 0.ToLFloat();
this.y = 0.ToLFloat();
this.z = 0.ToLFloat();
this.x.rawValue = x;
this.y.rawValue = y;
this.z.rawValue = z;
@@ -78,9 +78,9 @@ namespace JNGame.Math
/// <param name="z"></param>
public LVector3(int x, int y, int z)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.x = 0.ToLFloat();
this.y = 0.ToLFloat();
this.z = 0.ToLFloat();
this.x.rawValue = x * LFloat.Precision;
this.y.rawValue = y * LFloat.Precision;
this.z.rawValue = z * LFloat.Precision;
@@ -94,9 +94,9 @@ namespace JNGame.Math
/// <param name="z"></param>
public LVector3(long x, long y, long z)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.x = 0.ToLFloat();
this.y = 0.ToLFloat();
this.z = 0.ToLFloat();
this.x.rawValue = x * LFloat.Precision;
this.y.rawValue = y * LFloat.Precision;
this.z.rawValue = z * LFloat.Precision;
@@ -138,9 +138,9 @@ namespace JNGame.Math
/// <param name="z"></param>
public LVector3(bool shouldOnlyUseInEditor, float x, float y, float z)
{
this.x = (LFloat)0f;
this.y = (LFloat)0f;
this.z = (LFloat)0f;
this.x = 0.ToLFloat();
this.y = 0.ToLFloat();
this.z = 0.ToLFloat();
this.x.rawValue = (int)(x * LFloat.Precision);
this.y.rawValue = (int)(y * LFloat.Precision);
this.z.rawValue = (int)(z * LFloat.Precision);
@@ -220,13 +220,13 @@ namespace JNGame.Math
/// </summary>
public void Normalize()
{
long sqr = RawSqrMagnitude;
if (sqr == 0L) { return; }
long d = LMath.Sqrt(sqr);
x.rawValue = RawX * LFloat.Precision / d;
y.rawValue = RawY * LFloat.Precision / d;
z.rawValue = RawZ * LFloat.Precision / d;
LFloat sqr = (x * x + y * y + z * z); // 计算平方大小
if (sqr == LFloat.L0) { return; } // 检查零向量
LFloat length = LMath.Sqrt(sqr); // 计算长度
// 归一化分量
x.rawValue = (x.rawValue * LFloat.Precision) / length.rawValue;
y.rawValue = (y.rawValue * LFloat.Precision) / length.rawValue;
z.rawValue = (z.rawValue * LFloat.Precision) / length.rawValue;
}
/// <summary>
@@ -264,16 +264,16 @@ namespace JNGame.Math
}
}
/// <summary>
/// 向量定点数真实值模长平方
/// </summary>
public readonly long RawSqrMagnitude
{
get
{
return RawX * RawX + RawY * RawY + RawZ * RawZ;
}
}
// /// <summary>
// /// 向量定点数真实值模长平方
// /// </summary>
// public readonly long RawSqrMagnitude
// {
// get
// {
// return (x * x + y * y + z * z).rawValue;
// }
// }
/// <summary>
@@ -816,7 +816,7 @@ namespace JNGame.Math
/// <summary>
/// PI定点数真实值
/// </summary>
private const long kRawLPI = 3141593L; //3.1415926
private const long kRawLPI = 3141592L; //3.1415926
/// <summary>
/// 2PI定点数真实值
/// </summary>
@@ -824,7 +824,7 @@ namespace JNGame.Math
/// <summary>
/// 弧度转角度的算术因子定点数真实值
/// </summary>
private const long kRawLRad2Deg = 57295780L; //57.2957795
private const long kRawLRad2Deg = 57295779L; //57.2957795
/// <summary>
/// 角度转弧度的算术因子定点数真实值
/// </summary>
@@ -1,12 +1,14 @@
//#define DONT_USE_GENERATE_CODE
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Lockstep.CodeGenerator
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTAcos
@@ -1,12 +1,14 @@
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Lockstep.CodeGenerator
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTAsin
@@ -1,12 +1,15 @@
//#define DONT_USE_GENERATE_CODE
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Lockstep.CodeGenerator
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTAtan2
@@ -20,20 +23,20 @@ namespace JNGame.Math
static LUTAtan2()
{
_startIdx = new int[MaxQueryIdx +1]{
0, 18434, 26564, 30962, 33688, 35535, 36867, 37872, 38656, 39285, 39801, 40231, 40595, 40908, 41179, 41416, 41625, 41811, 41978, 42128, 42264, 42387, 42499, 42602, 42697, 42785, 42866, 42941, 43011, 43076, 43137, 43194, 43248, 43299, 43347, 43392, 43434, 43474, 43512, 43548, 43582, 43615, 43646, 43676, 43704, 43731, 43757, 43782, 43806, 43829, 43851, 43872, 43892, 43912, 43931, 43949, 43966, 43983, 43999, 44015, 44030, 44045, 44059, 44073, 44086, 44099, 44111, 44123, 44135, 44146, 44157, 44168, 44178, 44188, 44198, 44208, 44217, 44226, 44235, 44244, 44252, 44260, 44268, 44276, 44284, 44291, 44298, 44305, 44312, 44319, 44325, 44331, 44337, 44343, 44349, 44355, 44361, 44367, 44372, 44377,
44382, 44387, 44392, 44397, 44402, 44407, 44412, 44416, 44420, 44424, 44428, 44432, 44436, 44440, 44444, 44448, 44452, 44456, 44460, 44464, 44467, 44470, 44473, 44476, 44479, 44482, 44485, 44488, 44491, 44494, 44497, 44500, 44503, 44506, 44509, 44512, 44515, 44518, 44520, 44522, 44524, 44526, 44528, 44530, 44532, 44534, 44536, 44538, 44540, 44542, 44544, 44546, 44548, 44550, 44552, 44554, 44556, 44558, 44560, 44562, 44564, 44566, 44568, 44570, 44572, 44574, 44576, 44578, 44580, 44581, 44582, 44583, 44584, 44585, 44586, 44587, 44588, 44589, 44590, 44591, 44592, 44593, 44594, 44595, 44596, 44597, 44598, 44599, 44600, 44601, 44602, 44603, 44604, 44605, 44606, 44607, 44608, 44609, 44610, 44611,
44612, 44613, 44614, 44615, 44616, 44617, 44618, 44619, 44620, 44621, 44622, 44623, 44624, 44625, 44626, 44627, 44628, 44629, 44630, 44631, 44632, 44633, 44634, 44635, 44636, 44637, 44638, 44639, 44640, 44641, 44642, 44643, 44644, 44645, 44646, 44647, 44648, 44649, 44650, 44651, 44652, 44653, 44654, 44655, 44656, 44657, 44658, 44659, 44660, 44661, 44662, 44663, 44664, 44665, 44666, 44667, 44668, 44669, 44670, 44671, 44672, 44673, 44674, 44675, 44676, 44677, 44678, 44679, 44680, 44681, 44682, 44683, 44684, 44685, 44686, 44687, 44688, 44689, 44690, 44691, 44692, 44693, 44694, 44695, 44696, 44697, 44698, 44699, 44700, 44701, 44702, 44703, 44704, 44705, 44706, 44707, 44708, 44709, 44710, 44711,
44712, 44713, 44714, 44715, 44716, 44717, 44718, 44719, 44720, 44721, 44722, 44723, 44724, 44725, 44726, 44727, 44728, 44729, 44730, 44731, 44732, 44733, 44734, 44735, 44736, 44737, 44738, 44739, 44740, 44741, 44742, 44743, 44744, 44745, 44746, 44747, 44748, 44749, 44750, 44751, 44752, 44753, 44754, 44755, 44756, 44757, 44758, 44759, 44760, 44761, 44762, 44763, 44764, 44765, 44766, 44767, 44768, 44769, 44770, 44771, 44772, 44773, 44774, 44775, 44776, 44777, 44778, 44779, 44780, 44781, 44782, 44783, 44784, 44785, 44786, 44787, 44788, 44789, 44790, 44791, 44792, 44793, 44794, 44795, 44796, 44797, 44798, 44799, 44800, 44801, 44802, 44803, 44804, 44805, 44806, 44807, 44808, 44809, 44810, 44811,
44812, 44813, 44814, 44815, 44816, 44817, 44818, 44819, 44820, 44821, 44822, 44823, 44824, 44825, 44826, 44827, 44828, 44829, 44830, 44831, 44832, 44833, 44834, 44835, 44836, 44837, 44838, 44839, 44840, 44841, 44842, 44843, 44844, 44845, 44846, 44847, 44848, 44849, 44850, 44851, 44852, 44853, 44854, 44855, 44856, 44857, 44858, 44859, 44860, 44861, 44862, 44863, 44864, 44865, 44866, 44867, 44868, 44869, 44870, 44871, 44872, 44873, 44874, 44875, 44876, 44877, 44878, 44879, 44880, 44881, 44882, 44883, 44884, 44885, 44886, 44887, 44888, 44889, 44890, 44891, 44892, 44893, 44894, 44895, 44896, 44897, 44898, 44899, 44900, 44901, 44902, 44903, 44904, 44905, 44906, 44907, 44908, 44909, 44910, 44911,
44912, 44913, 44914, 44915, 44916, 44917, 44918, 44919, 44920, 44921, 44922, 44923, 44924, 44925, 44926, 44927, 44928, 44929, 44930, 44931, 44932, 44933, 44934, 44935, 44936, 44937, 44938, 44939, 44940, 44941, 44942, 44943, 44944, 44945, 44946, 44947, 44948, 44949, 44950, 44951, 44952, 44953, 44954, 44955, 44956, 44957, 44958, 44959, 44960, 44961, 44962, 44963, 44964, 44965, 44966, 44967, 44968, 44969, 44970, 44971, 44972, 44973, 44974, 44975, 44976, 44977, 44978, 44979, 44980, 44981, 44982, 44983, 44984, 44985, 44986, 44987, 44988, 44989, 44990, 44991, 44992, 44993, 44994, 44995, 44996, 44997, 44998, 44999, 45000, 45001, 45002, 45003, 45004, 45005, 45006, 45007, 45008, 45009, 45010, 45011,
45012, 45013, 45014, 45015, 45016, 45017, 45018, 45019, 45020, 45021, 45022, 45023, 45024, 45025, 45026, 45027, 45028, 45029, 45030, 45031, 45032, 45033, 45034, 45035, 45036, 45037, 45038, 45039, 45040, 45041, 45042, 45043, 45044, 45045, 45046, 45047, 45048, 45049, 45050, 45051, 45052, 45053, 45054, 45055, 45056, 45057, 45058, 45059, 45060, 45061, 45062, 45063, 45064, 45065, 45066, 45067, 45068, 45069, 45070, 45071, 45072, 45073, 45074, 45075, 45076, 45077, 45078, 45079, 45080, 45081, 45082, 45083, 45084, 45085, 45086, 45087, 45088, 45089, 45090, 45091, 45092, 45093, 45094, 45095, 45096, 45097, 45098, 45099, 45100, 45101, 45102, 45103, 45104, 45105, 45106, 45107, 45108, 45109, 45110, 45111,
45112, 45113, 45114, 45115, 45116, 45117, 45118, 45119, 45120, 45121, 45122, 45123, 45124, 45125, 45126, 45127, 45128, 45129, 45130, 45131, 45132, 45133, 45134, 45135, 45136, 45137, 45138, 45139, 45140, 45141, 45142, 45143, 45144, 45145, 45146, 45147, 45148, 45149, 45150, 45151, 45152, 45153, 45154, 45155, 45156, 45157, 45158, 45159, 45160, 45161, 45162, 45163, 45164, 45165, 45166, 45167, 45168, 45169, 45170, 45171, 45172, 45173, 45174, 45175, 45176, 45177, 45178, 45179, 45180, 45181, 45182, 45183, 45184, 45185, 45186, 45187, 45188, 45189, 45190, 45191, 45192, 45193, 45194, 45195, 45196, 45197, 45198, 45199, 45200, 45201, 45202, 45203, 45204, 45205, 45206, 45207, 45208, 45209, 45210, 45211,
45212, 45213, 45214, 45215, 45216, 45217, 45218, 45219, 45220, 45221, 45222, 45223, 45224, 45225, 45226, 45227, 45228, 45229, 45230, 45231, 45232, 45233, 45234, 45235, 45236, 45237, 45238, 45239, 45240, 45241, 45242, 45243, 45244, 45245, 45246, 45247, 45248, 45249, 45250, 45251, 45252, 45253, 45254, 45255, 45256, 45257, 45258, 45259, 45260, 45261, 45262, 45263, 45264, 45265, 45266, 45267, 45268, 45269, 45270, 45271, 45272, 45273, 45274, 45275, 45276, 45277, 45278, 45279, 45280, 45281, 45282, 45283, 45284, 45285, 45286, 45287, 45288, 45289, 45290, 45291, 45292, 45293, 45294, 45295, 45296, 45297, 45298, 45299, 45300, 45301, 45302, 45303, 45304, 45305, 45306, 45307, 45308, 45309, 45310, 45311,
45312, 45313, 45314, 45315, 45316, 45317, 45318, 45319, 45320, 45321, 45322, 45323, 45324, 45325, 45326, 45327, 45328, 45329, 45330, 45331, 45332, 45333, 45334, 45335, 45336, 45337, 45338, 45339, 45340, 45341, 45342, 45343, 45344, 45345, 45346, 45347, 45348, 45349, 45350, 45351, 45352, 45353, 45354, 45355, 45356, 45357, 45358, 45359, 45360, 45361, 45362, 45363, 45364, 45365, 45366, 45367, 45368, 45369, 45370, 45371, 45372, 45373, 45374, 45375, 45376, 45377, 45378, 45379, 45380, 45381, 45382, 45383, 45384, 45385, 45386, 45387, 45388, 45389, 45390, 45391, 45392, 45393, 45394, 45395, 45396, 45397, 45398, 45399, 45400, 45401, 45402, 45403, 45404, 45405, 45406, 45407, 45408, 45409, 45410, 45411,
45413
0, 18434, 26564, 30962, 33688, 35535, 36867, 37872, 38656, 39285, 39801, 40231, 40595, 40908, 41179, 41416, 41625, 41811, 41978, 42128, 42264, 42387, 42500, 42603, 42698, 42786, 42867, 42942, 43012, 43077, 43138, 43195, 43249, 43300, 43348, 43393, 43435, 43475, 43513, 43549, 43583, 43616, 43647, 43677, 43705, 43732, 43758, 43783, 43807, 43830, 43852, 43873, 43893, 43913, 43932, 43950, 43967, 43984, 44000, 44016, 44031, 44046, 44060, 44074, 44087, 44100, 44112, 44124, 44136, 44147, 44158, 44169, 44179, 44189, 44199, 44209, 44218, 44227, 44236, 44245, 44253, 44261, 44269, 44277, 44285, 44292, 44299, 44306, 44313, 44320, 44326, 44332, 44338, 44344, 44350, 44356, 44362, 44368, 44373, 44378,
44383, 44388, 44393, 44398, 44403, 44408, 44413, 44417, 44421, 44425, 44429, 44433, 44437, 44441, 44445, 44449, 44453, 44457, 44461, 44465, 44468, 44471, 44474, 44477, 44480, 44483, 44486, 44489, 44492, 44495, 44498, 44501, 44504, 44507, 44510, 44513, 44516, 44519, 44521, 44523, 44525, 44527, 44529, 44531, 44533, 44535, 44537, 44539, 44541, 44543, 44545, 44547, 44549, 44551, 44553, 44555, 44557, 44559, 44561, 44563, 44565, 44567, 44569, 44571, 44573, 44575, 44577, 44579, 44581, 44582, 44583, 44584, 44585, 44586, 44587, 44588, 44589, 44590, 44591, 44592, 44593, 44594, 44595, 44596, 44597, 44598, 44599, 44600, 44601, 44602, 44603, 44604, 44605, 44606, 44607, 44608, 44609, 44610, 44611, 44612,
44613, 44614, 44615, 44616, 44617, 44618, 44619, 44620, 44621, 44622, 44623, 44624, 44625, 44626, 44627, 44628, 44629, 44630, 44631, 44632, 44633, 44634, 44635, 44636, 44637, 44638, 44639, 44640, 44641, 44642, 44643, 44644, 44645, 44646, 44647, 44648, 44649, 44650, 44651, 44652, 44653, 44654, 44655, 44656, 44657, 44658, 44659, 44660, 44661, 44662, 44663, 44664, 44665, 44666, 44667, 44668, 44669, 44670, 44671, 44672, 44673, 44674, 44675, 44676, 44677, 44678, 44679, 44680, 44681, 44682, 44683, 44684, 44685, 44686, 44687, 44688, 44689, 44690, 44691, 44692, 44693, 44694, 44695, 44696, 44697, 44698, 44699, 44700, 44701, 44702, 44703, 44704, 44705, 44706, 44707, 44708, 44709, 44710, 44711, 44712,
44713, 44714, 44715, 44716, 44717, 44718, 44719, 44720, 44721, 44722, 44723, 44724, 44725, 44726, 44727, 44728, 44729, 44730, 44731, 44732, 44733, 44734, 44735, 44736, 44737, 44738, 44739, 44740, 44741, 44742, 44743, 44744, 44745, 44746, 44747, 44748, 44749, 44750, 44751, 44752, 44753, 44754, 44755, 44756, 44757, 44758, 44759, 44760, 44761, 44762, 44763, 44764, 44765, 44766, 44767, 44768, 44769, 44770, 44771, 44772, 44773, 44774, 44775, 44776, 44777, 44778, 44779, 44780, 44781, 44782, 44783, 44784, 44785, 44786, 44787, 44788, 44789, 44790, 44791, 44792, 44793, 44794, 44795, 44796, 44797, 44798, 44799, 44800, 44801, 44802, 44803, 44804, 44805, 44806, 44807, 44808, 44809, 44810, 44811, 44812,
44813, 44814, 44815, 44816, 44817, 44818, 44819, 44820, 44821, 44822, 44823, 44824, 44825, 44826, 44827, 44828, 44829, 44830, 44831, 44832, 44833, 44834, 44835, 44836, 44837, 44838, 44839, 44840, 44841, 44842, 44843, 44844, 44845, 44846, 44847, 44848, 44849, 44850, 44851, 44852, 44853, 44854, 44855, 44856, 44857, 44858, 44859, 44860, 44861, 44862, 44863, 44864, 44865, 44866, 44867, 44868, 44869, 44870, 44871, 44872, 44873, 44874, 44875, 44876, 44877, 44878, 44879, 44880, 44881, 44882, 44883, 44884, 44885, 44886, 44887, 44888, 44889, 44890, 44891, 44892, 44893, 44894, 44895, 44896, 44897, 44898, 44899, 44900, 44901, 44902, 44903, 44904, 44905, 44906, 44907, 44908, 44909, 44910, 44911, 44912,
44913, 44914, 44915, 44916, 44917, 44918, 44919, 44920, 44921, 44922, 44923, 44924, 44925, 44926, 44927, 44928, 44929, 44930, 44931, 44932, 44933, 44934, 44935, 44936, 44937, 44938, 44939, 44940, 44941, 44942, 44943, 44944, 44945, 44946, 44947, 44948, 44949, 44950, 44951, 44952, 44953, 44954, 44955, 44956, 44957, 44958, 44959, 44960, 44961, 44962, 44963, 44964, 44965, 44966, 44967, 44968, 44969, 44970, 44971, 44972, 44973, 44974, 44975, 44976, 44977, 44978, 44979, 44980, 44981, 44982, 44983, 44984, 44985, 44986, 44987, 44988, 44989, 44990, 44991, 44992, 44993, 44994, 44995, 44996, 44997, 44998, 44999, 45000, 45001, 45002, 45003, 45004, 45005, 45006, 45007, 45008, 45009, 45010, 45011, 45012,
45013, 45014, 45015, 45016, 45017, 45018, 45019, 45020, 45021, 45022, 45023, 45024, 45025, 45026, 45027, 45028, 45029, 45030, 45031, 45032, 45033, 45034, 45035, 45036, 45037, 45038, 45039, 45040, 45041, 45042, 45043, 45044, 45045, 45046, 45047, 45048, 45049, 45050, 45051, 45052, 45053, 45054, 45055, 45056, 45057, 45058, 45059, 45060, 45061, 45062, 45063, 45064, 45065, 45066, 45067, 45068, 45069, 45070, 45071, 45072, 45073, 45074, 45075, 45076, 45077, 45078, 45079, 45080, 45081, 45082, 45083, 45084, 45085, 45086, 45087, 45088, 45089, 45090, 45091, 45092, 45093, 45094, 45095, 45096, 45097, 45098, 45099, 45100, 45101, 45102, 45103, 45104, 45105, 45106, 45107, 45108, 45109, 45110, 45111, 45112,
45113, 45114, 45115, 45116, 45117, 45118, 45119, 45120, 45121, 45122, 45123, 45124, 45125, 45126, 45127, 45128, 45129, 45130, 45131, 45132, 45133, 45134, 45135, 45136, 45137, 45138, 45139, 45140, 45141, 45142, 45143, 45144, 45145, 45146, 45147, 45148, 45149, 45150, 45151, 45152, 45153, 45154, 45155, 45156, 45157, 45158, 45159, 45160, 45161, 45162, 45163, 45164, 45165, 45166, 45167, 45168, 45169, 45170, 45171, 45172, 45173, 45174, 45175, 45176, 45177, 45178, 45179, 45180, 45181, 45182, 45183, 45184, 45185, 45186, 45187, 45188, 45189, 45190, 45191, 45192, 45193, 45194, 45195, 45196, 45197, 45198, 45199, 45200, 45201, 45202, 45203, 45204, 45205, 45206, 45207, 45208, 45209, 45210, 45211, 45212,
45213, 45214, 45215, 45216, 45217, 45218, 45219, 45220, 45221, 45222, 45223, 45224, 45225, 45226, 45227, 45228, 45229, 45230, 45231, 45232, 45233, 45234, 45235, 45236, 45237, 45238, 45239, 45240, 45241, 45242, 45243, 45244, 45245, 45246, 45247, 45248, 45249, 45250, 45251, 45252, 45253, 45254, 45255, 45256, 45257, 45258, 45259, 45260, 45261, 45262, 45263, 45264, 45265, 45266, 45267, 45268, 45269, 45270, 45271, 45272, 45273, 45274, 45275, 45276, 45277, 45278, 45279, 45280, 45281, 45282, 45283, 45284, 45285, 45286, 45287, 45288, 45289, 45290, 45291, 45292, 45293, 45294, 45295, 45296, 45297, 45298, 45299, 45300, 45301, 45302, 45303, 45304, 45305, 45306, 45307, 45308, 45309, 45310, 45311, 45312,
45313, 45314, 45315, 45316, 45317, 45318, 45319, 45320, 45321, 45322, 45323, 45324, 45325, 45326, 45327, 45328, 45329, 45330, 45331, 45332, 45333, 45334, 45335, 45336, 45337, 45338, 45339, 45340, 45341, 45342, 45343, 45344, 45345, 45346, 45347, 45348, 45349, 45350, 45351, 45352, 45353, 45354, 45355, 45356, 45357, 45358, 45359, 45360, 45361, 45362, 45363, 45364, 45365, 45366, 45367, 45368, 45369, 45370, 45371, 45372, 45373, 45374, 45375, 45376, 45377, 45378, 45379, 45380, 45381, 45382, 45383, 45384, 45385, 45386, 45387, 45388, 45389, 45390, 45391, 45392, 45393, 45394, 45395, 45396, 45397, 45398, 45399, 45400, 45401, 45402, 45403, 45404, 45405, 45406, 45407, 45408, 45409, 45410, 45411, 45412,
45414
};
_arySize = new int[MaxQueryIdx +1]{
18434, 8130, 4398, 2726, 1847, 1332, 1005, 784, 629, 516, 430, 364, 313, 271, 237, 209, 186, 167, 150, 136, 123, 112, 103, 95, 88, 81, 75, 70, 65, 61, 57, 54, 51, 48, 45, 42, 40, 38, 36, 34, 33, 31, 30, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 19, 18, 17, 17, 16, 16, 15, 15, 14, 14, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5,
18434, 8130, 4398, 2726, 1847, 1332, 1005, 784, 629, 516, 430, 364, 313, 271, 237, 209, 186, 167, 150, 136, 123, 113, 103, 95, 88, 81, 75, 70, 65, 61, 57, 54, 51, 48, 45, 42, 40, 38, 36, 34, 33, 31, 30, 28, 27, 26, 25, 24, 23, 22, 21, 20, 20, 19, 18, 17, 17, 16, 16, 15, 15, 14, 14, 13, 13, 12, 12, 12, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5,
5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -469,38 +472,38 @@ namespace JNGame.Math
1518615, 1518633, 1518651, 1518669, 1518687, 1518705, 1518723, 1518741, 1518759, 1518778, 1518796, 1518814, 1518832, 1518850, 1518867, 1518885, 1518903, 1518921, 1518939, 1518957, 1518975, 1518993, 1519011, 1519029, 1519047, 1519064, 1519082, 1519100, 1519118, 1519136, 1519153, 1519171, 1519189, 1519207, 1519224, 1519242, 1519260, 1519277, 1519295, 1519313, 1519330, 1519348, 1519366, 1519383, 1519401, 1519418, 1519436, 1519454, 1519471, 1519489, 1519506, 1519524, 1519541, 1519559, 1519576, 1519594, 1519611, 1519629, 1519646, 1519663, 1519681, 1519698, 1519716, 1519733, 1519750, 1519768, 1519785, 1519802, 1519820, 1519837, 1519854, 1519871, 1519889, 1519906, 1519923, 1519940, 1519958, 1519975, 1519992, 1520009, 1520027, 1520044, 1520061, 1520078, 1520095, 1520112, 1520129, 1520146, 1520164, 1520181, 1520198, 1520215, 1520232, 1520249, 1520266, 1520283, 1520300, 1520317, 1520334, 1520351,
1520368, 1520385, 1520401, 1520418, 1520435, 1520452, 1520469, 1520486, 1520503, 1520520, 1520536, 1520553, 1520570, 1520587, 1520604, 1520620, 1520637, 1520654, 1520671, 1520687, 1520704, 1520721, 1520738, 1520754, 1520771, 1520787, 1520804, 1520821, 1520837, 1520856, 1520874, 1520892, 1520911, 1520929, 1520947, 1520965, 1520984, 1521002, 1521020, 1521038, 1521057, 1521075, 1521093, 1521111, 1521129, 1521147, 1521165, 1521183, 1521201, 1521220, 1521238, 1521256, 1521274, 1521292, 1521310, 1521328, 1521346, 1521364, 1521382, 1521399, 1521417, 1521435, 1521453, 1521471, 1521489, 1521507, 1521525, 1521543, 1521560, 1521578, 1521596, 1521614, 1521631, 1521649, 1521667, 1521685, 1521702, 1521720, 1521738, 1521755, 1521773, 1521791, 1521808, 1521826, 1521844, 1521861, 1521879, 1521896, 1521914, 1521932, 1521949, 1521967, 1521984, 1522002, 1522019, 1522037, 1522054, 1522071, 1522089, 1522106,
1522124, 1522141, 1522158, 1522176, 1522193, 1522211, 1522228, 1522245, 1522263, 1522280, 1522297, 1522314, 1522332, 1522349, 1522366, 1522383, 1522401, 1522418, 1522435, 1522452, 1522469, 1522486, 1522504, 1522521, 1522538, 1522555, 1522572, 1522589, 1522606, 1522623, 1522640, 1522657, 1522674, 1522691, 1522708, 1522725, 1522742, 1522759, 1522776, 1522793, 1522810, 1522827, 1522844, 1522861, 1522878, 1522894, 1522911, 1522928, 1522945, 1522962, 1522979, 1522995, 1523012, 1523029, 1523046, 1523063, 1523079, 1523096, 1523113, 1523129, 1523146, 1523163, 1523179, 1523196, 1523213, 1523231, 1523249, 1523268, 1523286, 1523305, 1523323, 1523341, 1523359, 1523378, 1523396, 1523414, 1523432, 1523451, 1523469, 1523487, 1523505, 1523523, 1523542, 1523560, 1523578, 1523596, 1523614, 1523632, 1523650, 1523668, 1523686, 1523704, 1523722, 1523740, 1523758, 1523776, 1523794, 1523812, 1523830, 1523848,
1523866, 1523884, 1523902, 1523919, 1523937, 1523955, 1523973, 1523991, 1524008, 1524026, 1524044, 1524062, 1524080, 1524097, 1524115, 1524133, 1524150, 1524168, 1524186, 1524203, 1524221, 1524239, 1524256, 1524274, 1524291, 1524309, 1524326, 1524344, 1524362, 1524379, 1524397, 1524414, 1524431, 1524449, 1524466, 1524484, 1524501, 1524519, 1524536, 1524553, 1524571, 1524588, 1524605, 1524623, 1524640, 1524657, 1524675, 1524692, 1524709, 1524726, 1524744, 1524761, 1524778, 1524795, 1524813, 1524830, 1524847, 1524864, 1524881, 1524898, 1524915, 1524932, 1524950, 1524967, 1524984, 1525001, 1525018, 1525035, 1525052, 1525069, 1525086, 1525103, 1525120, 1525137, 1525154, 1525171, 1525187, 1525204, 1525221, 1525238, 1525255, 1525272, 1525289, 1525305, 1525322, 1525339, 1525356, 1525373, 1525391, 1525409, 1525428, 1525446, 1525464, 1525483, 1525501, 1525519, 1525538, 1525556, 1525574, 1525592,
1525611, 1525629, 1525647, 1525665, 1525683, 1525701, 1525720, 1525738, 1525756, 1525774, 1525792, 1525810, 1525828, 1525846, 1525864, 1525882, 1525900, 1525918, 1525936, 1525954, 1525972, 1525990, 1526008, 1526026, 1526044, 1526062, 1526079, 1526097, 1526115, 1526133, 1526151, 1526168, 1526186, 1526204, 1526222, 1526239, 1526257, 1526275, 1526292, 1526310, 1526328, 1526345, 1526363, 1526381, 1526398, 1526416, 1526433, 1526451, 1526468, 1526486, 1526504, 1526521, 1526538, 1526556, 1526573, 1526591, 1526608, 1526626, 1526643, 1526660, 1526678, 1526695, 1526713, 1526730, 1526747, 1526764, 1526782, 1526799, 1526816, 1526834, 1526851, 1526868, 1526885, 1526902, 1526920, 1526937, 1526954, 1526971, 1526988, 1527005, 1527022, 1527040, 1527057, 1527074, 1527091, 1527108, 1527125, 1527142, 1527159, 1527176, 1527193, 1527210, 1527227, 1527244, 1527261, 1527277, 1527294, 1527311, 1527328, 1527345,
1527363, 1527382, 1527400, 1527418, 1527436, 1527455, 1527473, 1527491, 1527509, 1527527, 1527546, 1527564, 1527582, 1527600, 1527618, 1527636, 1527654, 1527672, 1527690, 1527708, 1527726, 1527744, 1527762, 1527780, 1527798, 1527816, 1527834, 1527852, 1527870, 1527888, 1527905, 1527923, 1527941, 1527959, 1527977, 1527994, 1528012, 1528030, 1528048, 1528066, 1528083, 1528101, 1528119, 1528136, 1528154, 1528172, 1528189, 1528207, 1528224, 1528242, 1528259, 1528277, 1528295, 1528312, 1528330, 1528347, 1528365, 1528382, 1528399, 1528417, 1528434, 1528452, 1528469, 1528486, 1528504, 1528521, 1528539, 1528556, 1528573, 1528591, 1528608, 1528625, 1528642, 1528660, 1528677, 1528694, 1528711, 1528728, 1528746, 1528763, 1528780, 1528797, 1528814, 1528831, 1528848, 1528865, 1528882, 1528899, 1528916, 1528933, 1528950, 1528967, 1528984, 1529001, 1529018, 1529035, 1529052, 1529069, 1529086, 1529103,
1529120, 1529136, 1529153, 1529171, 1529190, 1529208, 1529226, 1529244, 1529262, 1529281, 1529299, 1529317, 1529335, 1529353, 1529371, 1529389, 1529407, 1529425, 1529443, 1529461, 1529479, 1529497, 1529515, 1529533, 1529551, 1529569, 1529587, 1529604, 1529622, 1529640, 1529658, 1529676, 1529693, 1529711, 1529729, 1529747, 1529764, 1529782, 1529800, 1529817, 1529835, 1529853, 1529870, 1529888, 1529906, 1529923, 1529941, 1529958, 1529976, 1529993, 1530011, 1530028, 1530046, 1530063, 1530081, 1530098, 1530116, 1530133, 1530150, 1530168, 1530185, 1530202, 1530220, 1530237, 1530254, 1530272, 1530289, 1530306, 1530323, 1530341, 1530358, 1530375, 1530392, 1530409, 1530427, 1530444, 1530461, 1530478, 1530495, 1530512, 1530529, 1530546, 1530563, 1530580, 1530597, 1530614, 1530631, 1530648, 1530665, 1530682, 1530699, 1530716, 1530733, 1530750, 1530767, 1530784, 1530800, 1530817, 1530835, 1530853,
1530871, 1530890, 1530908, 1530926, 1530944, 1530962, 1530980, 1530998, 1531016, 1531034, 1531052, 1531070, 1531088, 1531105, 1531123, 1531141, 1531159, 1531177, 1531195, 1531213, 1531230, 1531248, 1531266, 1531284, 1531301, 1531319, 1531337, 1531354, 1531372, 1531390, 1531407, 1531425, 1531442, 1531460, 1531478, 1531495, 1531513, 1531530, 1531548, 1531565, 1531583, 1531600, 1531618, 1531635, 1531653, 1531670, 1531687, 1531705, 1531722, 1531739, 1531757, 1531774, 1531791, 1531808, 1531826, 1531843, 1531860, 1531877, 1531895, 1531912, 1531929, 1531946, 1531963, 1531980, 1531998, 1532015, 1532032, 1532049, 1532066, 1532083, 1532100, 1532117, 1532134, 1532151, 1532168, 1532185, 1532202, 1532218, 1532235, 1532252, 1532269, 1532286, 1532303, 1532320, 1532336, 1532353, 1532371, 1532390, 1532408, 1532426, 1532444, 1532462, 1532480, 1532499, 1532517, 1532535, 1532553, 1532571, 1532589, 1532607,
1532625, 1532643, 1532661, 1532679, 1532697, 1532715, 1532732, 1532750, 1532768, 1532786, 1532804, 1532822, 1532839, 1532857, 1532875, 1532893, 1532910, 1532928, 1532946, 1532963, 1532981, 1532999, 1533016, 1533034, 1533051, 1533069, 1533087, 1533104, 1533122, 1533139, 1533157, 1533174, 1533192, 1533209, 1533226, 1533244, 1533261, 1533279, 1533296, 1533313, 1533331, 1533348, 1533365, 1533383, 1533400, 1533417, 1533434, 1533452, 1533469, 1533486, 1533503, 1533520, 1533537, 1533555, 1533572, 1533589, 1533606, 1533623, 1533640, 1533657, 1533674, 1533691, 1533708, 1533725, 1533742, 1533759, 1533776, 1533794, 1533812, 1533830, 1533849, 1533867, 1533885, 1533903, 1533921, 1533939, 1533957, 1533976, 1533994, 1534012, 1534030, 1534048, 1534066, 1534084, 1534102, 1534119, 1534137, 1534155, 1534173, 1534191, 1534209, 1534227, 1534245, 1534262, 1534280, 1534298, 1534316, 1534333, 1534351, 1534369,
1534386, 1534404, 1534422, 1534439, 1534457, 1534475, 1534492, 1534510, 1534527, 1534545, 1534562, 1534580, 1534597, 1534615, 1534632, 1534650, 1534667, 1534684, 1534702, 1534719, 1534736, 1534754, 1534771, 1534788, 1534806, 1534823, 1534840, 1534857, 1534875, 1534892, 1534909, 1534926, 1534943, 1534960, 1534977, 1534994, 1535012, 1535029, 1535046, 1535063, 1535080, 1535097, 1535115, 1535133, 1535151, 1535169, 1535187, 1535206, 1535224, 1535242, 1535260, 1535278, 1535296, 1535314, 1535332, 1535350, 1535368, 1535386, 1535403, 1535421, 1535439, 1535457, 1535475, 1535493, 1535510, 1535528, 1535546, 1535564, 1535581, 1535599, 1535617, 1535634, 1535652, 1535670, 1535687, 1535705, 1535722, 1535740, 1535758, 1535775, 1535793, 1535810, 1535828, 1535845, 1535862, 1535880, 1535897, 1535915, 1535932, 1535949, 1535967, 1535984, 1536001, 1536019, 1536036, 1536053, 1536070, 1536087, 1536105, 1536122,
1536139, 1536156, 1536173, 1536190, 1536208, 1536225, 1536242, 1536259, 1536276, 1536293, 1536310, 1536327, 1536345, 1536363, 1536381, 1536400, 1536418, 1536436, 1536454, 1536472, 1536490, 1536509, 1536527, 1536545, 1536563, 1536581, 1536599, 1536617, 1536635, 1536653, 1536670, 1536688, 1536706, 1536724, 1536742, 1536760, 1536778, 1536795, 1536813, 1536831, 1536849, 1536866, 1536884, 1536902, 1536919, 1536937, 1536955, 1536972, 1536990, 1537007, 1537025, 1537042, 1537060, 1537077, 1537095, 1537112, 1537130, 1537147, 1537165, 1537182, 1537199, 1537217, 1537234, 1537251, 1537269, 1537286, 1537303, 1537320, 1537338, 1537355, 1537372, 1537389, 1537406, 1537423, 1537441, 1537458, 1537475, 1537493, 1537511, 1537529, 1537547, 1537566, 1537584, 1537602, 1537620, 1537638, 1537656, 1537674, 1537692, 1537710, 1537728, 1537746, 1537763, 1537781, 1537799, 1537817, 1537835, 1537853, 1537870, 1537888,
1537906, 1537924, 1537941, 1537959, 1537977, 1537994, 1538012, 1538030, 1538047, 1538065, 1538082, 1538100, 1538117, 1538135, 1538152, 1538170, 1538187, 1538205, 1538222, 1538239, 1538257, 1538274, 1538291, 1538309, 1538326, 1538343, 1538360, 1538378, 1538395, 1538412, 1538429, 1538446, 1538464, 1538481, 1538498, 1538515, 1538532, 1538549, 1538567, 1538585, 1538604, 1538622, 1538640, 1538658, 1538676, 1538694, 1538712, 1538730, 1538748, 1538766, 1538784, 1538802, 1538820, 1538838, 1538856, 1538874, 1538892, 1538910, 1538927, 1538945, 1538963, 1538981, 1538998, 1539016, 1539034, 1539052, 1539069, 1539087, 1539105, 1539122, 1539140, 1539157, 1539175, 1539192, 1539210, 1539227, 1539245, 1539262, 1539280, 1539297, 1539314, 1539332, 1539349, 1539367, 1539384, 1539401, 1539418, 1539436, 1539453, 1539470, 1539487, 1539505, 1539522, 1539539, 1539556, 1539574, 1539592, 1539610, 1539628, 1539646,
1539664, 1539682, 1539700, 1539718, 1539736, 1539754, 1539771, 1539789, 1539807, 1539825, 1539842, 1539860, 1539878, 1539896, 1539913, 1539931, 1539948, 1539966, 1539984, 1540001, 1540019, 1540036, 1540054, 1540071, 1540089, 1540106, 1540124, 1540141, 1540158, 1540176, 1540193, 1540210, 1540228, 1540245, 1540262, 1540280, 1540297, 1540314, 1540331, 1540348, 1540366, 1540383, 1540400, 1540417, 1540434, 1540451, 1540468, 1540485, 1540502, 1540520, 1540538, 1540556, 1540574, 1540592, 1540610, 1540627, 1540645, 1540663, 1540681, 1540699, 1540716, 1540734, 1540752, 1540770, 1540787, 1540805, 1540822, 1540840, 1540858, 1540875, 1540893, 1540910, 1540928, 1540945, 1540963, 1540980, 1540997, 1541015, 1541032, 1541050, 1541067, 1541084, 1541102, 1541119, 1541136, 1541153, 1541171, 1541188, 1541205, 1541222, 1541239, 1541256, 1541273, 1541290, 1541308, 1541325, 1541342, 1541359, 1541376, 1541393,
1541411, 1541429, 1541446, 1541464, 1541482, 1541500, 1541518, 1541536, 1541554, 1541571, 1541589, 1541607, 1541625, 1541643, 1541660, 1541678, 1541695, 1541713, 1541731, 1541748, 1541766, 1541783, 1541801, 1541818, 1541836, 1541853, 1541871, 1541888, 1541906, 1541923, 1541940, 1541958, 1541975, 1541992, 1542010, 1542027, 1542044, 1542061, 1542078, 1542096, 1542113, 1542130, 1542147, 1542164, 1542181, 1542198, 1542215, 1542232, 1542250, 1542268, 1542286, 1542304, 1542322, 1542340, 1542358, 1542376, 1542394, 1542412, 1542430, 1542448, 1542466, 1542484, 1542502, 1542519, 1542537, 1542555, 1542572, 1542590, 1542608, 1542625, 1542643, 1542661, 1542678, 1542696, 1542713, 1542731, 1542748, 1542766, 1542783, 1542801, 1542818, 1542835, 1542853, 1542870, 1542887, 1542905, 1542922, 1542939, 1542956, 1542974, 1542991, 1543008, 1543025, 1543044, 1543062, 1543080, 1543098, 1543117, 1543135, 1543153,
1543171, 1543189, 1543208, 1543226, 1543244, 1543262, 1543280, 1543298, 1543316, 1543334, 1543352, 1543370, 1543388, 1543405, 1543423, 1543441, 1543459, 1543477, 1543494, 1543512, 1543530, 1543547, 1543565, 1543583, 1543600, 1543618, 1543636, 1543653, 1543671, 1543688, 1543706, 1543723, 1543741, 1543758, 1543775, 1543794, 1543812, 1543830, 1543848, 1543866, 1543884, 1543902, 1543921, 1543939, 1543957, 1543975, 1543993, 1544010, 1544028, 1544046, 1544064, 1544082, 1544100, 1544118, 1544135, 1544153, 1544171, 1544189, 1544206, 1544224, 1544242, 1544259, 1544277, 1544294, 1544312, 1544330, 1544347, 1544364, 1544382, 1544399, 1544417, 1544434, 1544451, 1544469, 1544486, 1544504, 1544523, 1544541, 1544559, 1544577, 1544595, 1544613, 1544631, 1544649, 1544667, 1544685, 1544703, 1544721, 1544739, 1544757, 1544774, 1544792, 1544810, 1544828, 1544845, 1544863, 1544881, 1544898, 1544916, 1544934,
1544951, 1544969, 1544986, 1545004, 1545021, 1545039, 1545056, 1545074, 1545091, 1545108, 1545126, 1545143, 1545160, 1545179, 1545197, 1545215, 1545233, 1545251, 1545269, 1545288, 1545306, 1545324, 1545342, 1545360, 1545378, 1545395, 1545413, 1545431, 1545449, 1545467, 1545485, 1545503, 1545520, 1545538, 1545556, 1545573, 1545591, 1545609, 1545626, 1545644, 1545661, 1545679, 1545696, 1545714, 1545731, 1545749, 1545766, 1545784, 1545801, 1545819, 1545838, 1545856, 1545874, 1545893, 1545911, 1545929, 1545947, 1545965, 1545983, 1546002, 1546020, 1546038, 1546056, 1546074, 1546092, 1546110, 1546127, 1546145, 1546163, 1546181, 1546199, 1546217, 1546234, 1546252, 1546270, 1546287, 1546305, 1546323, 1546340, 1546358, 1546375, 1546393, 1546410, 1546428, 1546446, 1546464, 1546482, 1546500, 1546518, 1546536, 1546554, 1546571, 1546589, 1546607, 1546625, 1546642, 1546660, 1546678, 1546695, 1546713,
1546730, 1546748, 1546766, 1546783, 1546800, 1546818, 1546835, 1546853, 1546870, 1546887, 1546905, 1546922, 1546939, 1546956, 1546974, 1546991, 1547009, 1547027, 1547045, 1547064, 1547082, 1547100, 1547118, 1547136, 1547154, 1547172, 1547190, 1547208, 1547226, 1547244, 1547262, 1547280, 1547297, 1547315, 1547333, 1547351, 1547369, 1547386, 1547404, 1547422, 1547439, 1547457, 1547474, 1547492, 1547509, 1547527, 1547544, 1547562, 1547580, 1547598, 1547616, 1547634, 1547652, 1547670, 1547688, 1547705, 1547723, 1547741, 1547758, 1547776, 1547794, 1547811, 1547829, 1547847, 1547864, 1547882, 1547899, 1547917, 1547934, 1547951, 1547969, 1547986, 1548003, 1548021, 1548038, 1548055, 1548072, 1548091, 1548109, 1548128, 1548146, 1548164, 1548183, 1548201, 1548219, 1548237, 1548255, 1548274, 1548292, 1548310, 1548328, 1548346, 1548364, 1548382, 1548400, 1548417, 1548435, 1548453, 1548471, 1548489,
1548506, 1548524, 1548542, 1548560, 1548577, 1548596, 1548614, 1548632, 1548650, 1548668, 1548686, 1548704, 1548723, 1548741, 1548759, 1548777, 1548794, 1548812, 1548830, 1548848, 1548866, 1548884, 1548902, 1548919, 1548937, 1548955, 1548972, 1548990, 1549008, 1549025, 1549043, 1549060, 1549078, 1549096, 1549114, 1549133, 1549151, 1549169, 1549187, 1549204, 1549222, 1549240, 1549258, 1549276, 1549294, 1549311, 1549329, 1549347, 1549365, 1549382, 1549400, 1549417, 1549435, 1549453, 1549470, 1549488, 1549505, 1549522, 1549540, 1549559, 1549577, 1549595, 1549612, 1549630, 1549648, 1549666, 1549684, 1549702, 1549720, 1549737, 1549755, 1549773, 1549790, 1549808, 1549826, 1549843, 1549861, 1549878, 1549896, 1549913, 1549931, 1549948, 1549965, 1549984, 1550002, 1550020, 1550038, 1550055, 1550073, 1550091, 1550109, 1550127, 1550145, 1550162, 1550180, 1550198, 1550216, 1550233, 1550251, 1550268,
1550286, 1550303, 1550321, 1550338, 1550356, 1550373, 1550390, 1550409, 1550427, 1550445, 1550463, 1550481, 1550499, 1550516, 1550534, 1550552, 1550570, 1550588, 1550605, 1550623, 1550641, 1550658, 1550676, 1550694, 1550711, 1550729, 1550746, 1550764, 1550781, 1550799, 1550817, 1550835, 1550853, 1550871, 1550889, 1550907, 1550925, 1550943, 1550961, 1550979, 1550996, 1551014, 1551032, 1551050, 1551067, 1551085, 1551103, 1551120, 1551138, 1551156, 1551173, 1551190, 1551209, 1551227, 1551245, 1551263, 1551282, 1551300, 1551318, 1551336, 1551354, 1551372, 1551390, 1551408, 1551426, 1551443, 1551461, 1551479, 1551497, 1551514, 1551532, 1551550, 1551567, 1551586, 1551604, 1551623, 1551641, 1551659, 1551678, 1551696, 1551714, 1551732, 1551751, 1551769, 1551787, 1551805, 1551823, 1551841, 1551859, 1551877, 1551895, 1551912, 1551930, 1551948, 1551966, 1551983, 1552001, 1552019, 1552036, 1552054,
1552071, 1552089, 1552106, 1552124, 1552141, 1552159, 1552176, 1552193, 1552211, 1552228, 1552245, 1552262, 1552279, 1552297, 1552315, 1552333, 1552351, 1552369, 1552387, 1552405, 1552423, 1552440, 1552458, 1552476, 1552493, 1552511, 1552529, 1552546, 1552564, 1552581, 1552599, 1552616, 1552634, 1552653, 1552671, 1552689, 1552707, 1552726, 1552744, 1552762, 1552780, 1552798, 1552816, 1552834, 1552852, 1552869, 1552887, 1552905, 1552923, 1552941, 1552959, 1552978, 1552997, 1553015, 1553034, 1553052, 1553071, 1553089, 1553108, 1553126, 1553145, 1553163, 1553181, 1553199, 1553218, 1553236, 1553254, 1553272, 1553290, 1553308, 1553326, 1553344, 1553362, 1553380, 1553397, 1553415, 1553433, 1553451, 1553468, 1553486, 1553504, 1553521, 1553539, 1553556, 1553575, 1553593, 1553612, 1553630, 1553649, 1553667, 1553685, 1553704, 1553722, 1553740, 1553758, 1553776, 1553794, 1553812, 1553830, 1553848,
1553866, 1553884, 1553902, 1553920, 1553938, 1553955, 1553973, 1553991, 1554008, 1554026, 1554044, 1554061, 1554078, 1554096, 1554113, 1554131, 1554149, 1554168, 1554186, 1554204, 1554223, 1554241, 1554259, 1554278, 1554296, 1554314, 1554332, 1554350, 1554368, 1554386, 1554404, 1554422, 1554440, 1554457, 1554475, 1554493, 1554511, 1554528, 1554546, 1554563, 1554581, 1554599, 1554616, 1554633, 1554651, 1554668, 1554687, 1554705, 1554724, 1554742, 1554761, 1554779, 1554797, 1554816, 1554834, 1554852, 1554870, 1554888, 1554906, 1554924, 1554942, 1554960, 1554978, 1554996, 1555014, 1555031, 1555049, 1555067, 1555084, 1555102, 1555120, 1555137, 1555155, 1555172, 1555191, 1555210, 1555228, 1555247, 1555265, 1555284, 1555302, 1555321, 1555339, 1555358, 1555376, 1555394, 1555412, 1555431, 1555449, 1555467, 1555485, 1555503, 1555521, 1555539, 1555557, 1555575, 1555592, 1555610, 1555628, 1555645,
1555665, 1555684, 1555703, 1555722, 1555740, 1555759, 1555778, 1555797, 1555816, 1555834, 1555853, 1555872, 1555890, 1555909, 1555927, 1555945, 1555964, 1555982, 1556000, 1556019, 1556037, 1556055, 1556073, 1556091, 1556109, 1556127, 1556145, 1556163, 1556181, 1556198, 1556216, 1556234, 1556251, 1556269, 1556287, 1556304, 1556323, 1556342, 1556361, 1556380, 1556399, 1556418, 1556437, 1556455, 1556474, 1556493, 1556511, 1556530, 1556548, 1556567, 1556585, 1556603, 1556622, 1556640, 1556658, 1556676, 1556694, 1556712, 1556730, 1556748, 1556766, 1556784, 1556802, 1556820, 1556837, 1556855, 1556873, 1556890, 1556908, 1556927, 1556946, 1556965, 1556985, 1557004, 1557023, 1557042, 1557060, 1557079, 1557098, 1557117, 1557135, 1557154, 1557173, 1557191, 1557210, 1557228, 1557247, 1557265, 1557283, 1557301, 1557319, 1557338, 1557356, 1557374, 1557392, 1557410, 1557428, 1557446, 1557463, 1557481,
1557499, 1557516, 1557534, 1557552, 1557569, 1557587, 1557604, 1557621, 1557639, 1557658, 1557677, 1557696, 1557715, 1557734, 1557753, 1557772, 1557791, 1557810, 1557828, 1557847, 1557865, 1557884, 1557903, 1557921, 1557939, 1557958, 1557976, 1557994, 1558012, 1558031, 1558049, 1558067, 1558085, 1558103, 1558120, 1558138, 1558156, 1558174, 1558191, 1558209, 1558227, 1558244, 1558262, 1558279, 1558296, 1558316, 1558335, 1558355, 1558374, 1558393, 1558413, 1558432, 1558451, 1558470, 1558489, 1558508, 1558526, 1558545, 1558564, 1558583, 1558601, 1558620, 1558638, 1558657, 1558675, 1558694, 1558712, 1558730, 1558748, 1558766, 1558784, 1558802, 1558820, 1558838, 1558856, 1558874, 1558892, 1558909, 1558927, 1558945, 1558962, 1558979, 1558997, 1559014, 1559032, 1559051, 1559071, 1559091, 1559110, 1559130, 1559149, 1559168, 1559188, 1559207, 1559226, 1559245, 1559264, 1559283, 1559302, 1559321,
1559340, 1559358, 1559377, 1559396, 1559414, 1559433, 1559451, 1559469, 1559488, 1559506, 1559524, 1559542, 1559560, 1559578, 1559596, 1559614, 1559632, 1559650, 1559668, 1559685, 1559706, 1559726, 1559747, 1559767, 1559787, 1559807, 1559827, 1559847, 1559867, 1559887, 1559907, 1559927, 1559946, 1559966, 1559985, 1560005, 1560024, 1560044, 1560063, 1560082, 1560101, 1560120, 1560139, 1560158, 1560177, 1560196, 1560214, 1560233, 1560251, 1560270, 1560288, 1560307, 1560325, 1560343, 1560361, 1560379, 1560398, 1560416, 1560433, 1560451, 1560469, 1560487, 1560505, 1560522, 1560540, 1560557, 1560575, 1560592, 1560613, 1560634, 1560654, 1560675, 1560695, 1560716, 1560736, 1560756, 1560776, 1560796, 1560816, 1560836, 1560856, 1560876, 1560895, 1560915, 1560934, 1560954, 1560973, 1560992, 1561011, 1561030, 1561050, 1561069, 1561087, 1561106, 1561125, 1561144, 1561162, 1561181, 1561199, 1561218,
1561236, 1561254, 1561272, 1561290, 1561308, 1561326, 1561344, 1561362, 1561380, 1561398, 1561415, 1561433, 1561450, 1561472, 1561494, 1561515, 1561537, 1561558, 1561579, 1561601, 1561622, 1561643, 1561664, 1561684, 1561705, 1561726, 1561746, 1561767, 1561787, 1561807, 1561827, 1561848, 1561867, 1561887, 1561907, 1561927, 1561946, 1561966, 1561985, 1562005, 1562024, 1562043, 1562062, 1562081, 1562100, 1562119, 1562138, 1562157, 1562175, 1562194, 1562212, 1562231, 1562249, 1562267, 1562285, 1562304, 1562321, 1562339, 1562357, 1562375, 1562393, 1562410, 1562428, 1562445, 1562463, 1562486, 1562509, 1562532, 1562554, 1562577, 1562599, 1562622, 1562644, 1562666, 1562688, 1562710, 1562731, 1562753, 1562775, 1562796, 1562817, 1562838, 1562860, 1562880, 1562901, 1562922, 1562943, 1562963, 1562983, 1563004, 1563024, 1563044, 1563064, 1563084, 1563104, 1563123, 1563143, 1563162, 1563182, 1563201,
1563220, 1563239, 1563258, 1563277, 1563296, 1563315, 1563333, 1563352, 1563370, 1563389, 1563407, 1563425, 1563443, 1563461, 1563479, 1563497, 1563514, 1563532, 1563550, 1563576, 1563602, 1563627, 1563653, 1563678, 1563704, 1563729, 1563754, 1563778, 1563803, 1563827, 1563851, 1563876, 1563899, 1563923, 1563947, 1563970, 1563993, 1564016, 1564039, 1564062, 1564085, 1564107, 1564129, 1564151, 1564173, 1564195, 1564217, 1564239, 1564260, 1564281, 1564302, 1564323, 1564344, 1564365, 1564386, 1564406, 1564427, 1564447, 1564467, 1564487, 1564507, 1564526, 1564546, 1564565, 1564585, 1564604, 1564623, 1564642, 1564661, 1564680, 1564698, 1564717, 1564735, 1564754, 1564772, 1564790, 1564808, 1564826, 1564844, 1564861, 1564879, 1564913, 1564948, 1564982, 1565016, 1565049, 1565082, 1565114, 1565146, 1565178, 1565209, 1565240, 1565271, 1565301, 1565331, 1565361, 1565390, 1565420, 1565448, 1565477,
1565505, 1565533, 1565560, 1565587, 1565615, 1565641, 1565668, 1565694, 1565720, 1565745, 1565771, 1565796, 1565821, 1565845, 1565870, 1565894, 1565918, 1565942, 1565965, 1565988, 1566011, 1566034, 1566056, 1566079, 1566101, 1566123, 1566145, 1566166, 1566188, 1566209, 1566230, 1566250, 1566271, 1566291, 1566312, 1566332, 1566351, 1566371, 1566391, 1566410, 1566429, 1566448, 1566467, 1566486, 1566504, 1566522, 1566541, 1566559, 1566576, 1566594, 1566612, 1566629, 1566646, 1566664, 1566681, 1566697, 1566714, 1566731, 1566747, 1566764, 1566780, 1566796, 1566812, 1566828, 1566843, 1566859, 1566874, 1566890, 1566905, 1566920, 1566935, 1566950, 1566964, 1566979, 1566994, 1567008, 1567022, 1567036, 1567051, 1567065, 1567078, 1567092, 1567106, 1567119, 1567133, 1567146, 1567160, 1567173, 1567186, 1567199, 1567212, 1567224, 1567237, 1567250, 1567262, 1567275, 1567287, 1567299, 1567312, 1567324,
1567336, 1567348, 1567359, 1567371, 1567383, 1567394, 1567406, 1567417, 1567429, 1567440, 1567451, 1567463, 1567474, 1567485, 1567496, 1567506, 1567517, 1567528, 1567538, 1567549, 1567560, 1567570, 1567580, 1567591, 1567601, 1567611, 1567621, 1567631, 1567641, 1567651, 1567661, 1567671, 1567681, 1567690, 1567700, 1567709, 1567719, 1567728, 1567738, 1567747, 1567756, 1567766, 1567775, 1567784, 1567793, 1567802, 1567811, 1567820, 1567829, 1567837, 1567846, 1567855, 1567863, 1567872, 1567880, 1567889, 1567897, 1567906, 1567914, 1567922, 1567931, 1567939, 1567947, 1567955, 1567963, 1567971, 1567979, 1567987, 1567995, 1568003, 1568010, 1568018, 1568026, 1568033, 1568041, 1568049, 1568056, 1568064, 1568071, 1568078, 1568086, 1568093, 1568100, 1568108, 1568115, 1568122, 1568129, 1568136, 1568143, 1568150, 1568157, 1568164, 1568171, 1568178, 1568185, 1568192, 1568198, 1568205, 1568212, 1568219,
1568225, 1568232, 1568238, 1568245, 1568251, 1568258, 1568264, 1568271, 1568277, 1568283, 1568290, 1568296, 1568302, 1568308, 1568314, 1568321, 1568327, 1568333, 1568339, 1568345, 1568351, 1568357, 1568363, 1568369, 1568374, 1568380, 1568386, 1568392, 1568398, 1568403, 1568409, 1568415, 1568421, 1568426, 1568432, 1568437, 1568443, 1568448, 1568454, 1568459, 1568465, 1568470, 1568476, 1568481, 1568486, 1568492, 1568497, 1568502, 1568508, 1568513, 1568518, 1568523, 1568528, 1568533, 1568539, 1568544, 1568549, 1568554, 1568559, 1568564, 1568569, 1568574, 1568579, 1568583, 1568588, 1568593, 1568598, 1568603, 1568608, 1568612, 1568617, 1568622, 1568627, 1568631, 1568636, 1568641, 1568645, 1568650, 1568655, 1568659, 1568664, 1568668, 1568673, 1568677, 1568682, 1568686, 1568691, 1568695, 1568699, 1568704, 1568708, 1568712, 1568717, 1568721, 1568725, 1568730, 1568734, 1568738, 1568742, 1568747,
1568751, 1568755, 1568759, 1568763, 1568767, 1568772, 1568776, 1568780, 1568784, 1568788, 1568792, 1568796, 1568800, 1568804, 1568808, 1568812, 1568816, 1568819, 1568823, 1568827, 1568831, 1568835, 1568839, 1568843, 1568847, 1568850, 1568854, 1568858, 1568862, 1568865, 1568869, 1568873, 1568876, 1568880, 1568884, 1568887, 1568891, 1568895, 1568898, 1568902, 1568905, 1568909, 1568913, 1568916, 1568920, 1568923, 1568927, 1568930, 1568934, 1568937, 1568940, 1568944, 1568947, 1568951, 1568954, 1568958, 1568961, 1568964, 1568968, 1568971, 1568974, 1568978, 1568981, 1568984, 1568987, 1568991, 1568994, 1568997, 1569000, 1569004, 1569007, 1569010, 1569013, 1569016, 1569020, 1569023, 1569026, 1569029, 1569032, 1569035, 1569038, 1569041, 1569045, 1569048, 1569051, 1569054, 1569057, 1569060, 1569063, 1569066, 1569069, 1569072, 1569075, 1569078, 1569081, 1569084, 1569086, 1569089, 1569092, 1569095,
1569098, 1569101, 1569104, 1569107, 1569110, 1569112, 1569115, 1569118, 1569121, 1569124, 1569126, 1569129, 1569132, 1569135, 1569137, 1569140, 1569143, 1569146, 1569148, 1569151, 1569154, 1569157, 1569159, 1569162, 1569164, 1569167, 1569170, 1569172, 1569175, 1569178, 1569180, 1569183, 1569185, 1569188, 1569191, 1569193, 1569196, 1569198, 1569201, 1569203, 1569206, 1569208, 1569211, 1569214, 1569216, 1569218, 1569221, 1569223, 1569226, 1569228, 1569231, 1569233, 1569236, 1569238, 1569241, 1569243, 1569245, 1569248, 1569250, 1569253, 1569255, 1569257, 1569260, 1569262, 1569264, 1569267, 1569269, 1569271, 1569274, 1569276, 1569278, 1569281, 1569283, 1569285, 1569288, 1569290, 1569292, 1569294, 1569297, 1569299, 1569301, 1569303, 1569306, 1569308, 1569310, 1569312, 1569314, 1569316, 1569319, 1569321, 1569323, 1569325, 1569327, 1569330, 1569332, 1569334, 1569336, 1569338, 1569340, 1569342,
1569344, 1569347, 1569349, 1569351, 1569353, 1569355, 1569357, 1569359, 1569361, 1569363, 1569365, 1569367, 1569369, 1569371, 1569373, 1569375, 1569377, 1569379, 1569381, 1569383, 1569385, 1569387, 1569389, 1569391, 1569393, 1569395, 1569397, 1569399, 1569401, 1569403, 1569405, 1569407, 1569409, 1569411, 1569413, 1569415, 1569416, 1569418, 1569420, 1569422, 1569424, 1569426, 1569428, 1569430, 1569432, 1569433, 1569435, 1569437, 1569439, 1569441, 1569443, 1569445, 1569446, 1569448, 1569450, 1569452, 1569454, 1569455, 1569457, 1569459, 1569461, 1569463, 1569464, 1569466, 1569468, 1569470, 1569471, 1569473, 1569475, 1569477, 1569478, 1569480, 1569482, 1569483, 1569485, 1569487, 1569489, 1569490, 1569492, 1569494, 1569495, 1569497, 1569499, 1569501, 1569502, 1569504, 1569506, 1569507, 1569509, 1569510, 1569512, 1569514, 1569515, 1569517, 1569519, 1569520, 1569522, 1569524, 1569525, 1569527,
1569528, 1569530, 1569532, 1569533, 1569535, 1569536, 1569538, 1569540, 1569541, 1569543, 1569544, 1569546, 1569547, 1569549, 1569550, 1569552, 1569554, 1569555, 1569557, 1569558, 1569560, 1569561, 1569563, 1569564, 1569566, 1569567, 1569569, 1569570, 1569572, 1569573, 1569575, 1569576, 1569578, 1569579, 1569581, 1569582, 1569584, 1569585, 1569587, 1569588, 1569590, 1569591, 1569592, 1569594, 1569595, 1569597, 1569598, 1569600, 1569601, 1569602, 1569604, 1569605, 1569607, 1569608, 1569610, 1569611, 1569612, 1569614, 1569615, 1569617, 1569618, 1569619, 1569621, 1569622, 1569623, 1569625, 1569626, 1569628, 1569629, 1569630, 1569632, 1569633, 1569634, 1569636, 1569637, 1569638, 1569640, 1569641, 1569642, 1569644, 1569645, 1569646, 1569648, 1569649, 1569650, 1569652, 1569653, 1569654, 1569656, 1569657, 1569658, 1569659, 1569661, 1569662, 1569663, 1569665, 1569666, 1569667, 1569668, 1569670,
1569671, 1569672, 1569674, 1569675, 1569676, 1569677, 1569679, 1569680, 1569681, 1569682, 1569684, 1569685, 1569686, 1569687, 1569688, 1569690, 1569691, 1569692, 1569693, 1569694, 1569696, 1569697, 1569698, 1569699, 1569701, 1569702, 1569703, 1569704, 1569705, 1569707, 1569708, 1569709, 1569710, 1569711, 1569712, 1569714, 1569715, 1569716, 1569717, 1569718, 1569719, 1569721, 1569722, 1569723, 1569724, 1569725, 1569726, 1569727, 1569729, 1569730, 1569731, 1569732, 1569733, 1569734, 1569735, 1569736, 1569738, 1569739, 1569740, 1569741, 1569742, 1569743, 1569744, 1569745, 1569746, 1569748, 1569749, 1569750, 1569751, 1569752, 1569753, 1569754, 1569755, 1569756, 1569757, 1569759, 1569760, 1569761, 1569762, 1569763, 1569764, 1569765, 1569766, 1569767, 1569768, 1569769, 1569770, 1569771, 1569772, 1569773, 1569774, 1569775, 1569777, 1569777, 1569779, 1569780, 1569781, 1569782, 1569783, 1569784,
1569785, 1569786, 1569787, 1569788, 1569789, 1569790, 1569791, 1569792, 1569793, 1569794, 1569795, 1569796, 785398
1523866, 1523884, 1523902, 1523919, 1523937, 1523955, 1523973, 1523991, 1524008, 1524026, 1524044, 1524062, 1524080, 1524097, 1524115, 1524133, 1524150, 1524168, 1524186, 1524203, 1524221, 1524239, 1524256, 1524274, 1524291, 1524309, 1524326, 1524344, 1524362, 1524379, 1524397, 1524414, 1524431, 1524449, 1524466, 1524484, 1524501, 1524519, 1524536, 1524553, 1524571, 1524588, 1524605, 1524623, 1524640, 1524657, 1524675, 1524692, 1524709, 1524726, 1524744, 1524761, 1524778, 1524795, 1524813, 1524830, 1524847, 1524864, 1524881, 1524898, 1524915, 1524932, 1524950, 1524967, 1524984, 1525001, 1525018, 1525035, 1525052, 1525069, 1525086, 1525103, 1525120, 1525137, 1525154, 1525171, 1525187, 1525204, 1525221, 1525238, 1525255, 1525272, 1525289, 1525305, 1525322, 1525339, 1525356, 1525373, 1525391, 1525409, 1525427, 1525445, 1525464, 1525482, 1525500, 1525518, 1525536, 1525554, 1525572, 1525591,
1525609, 1525627, 1525645, 1525663, 1525681, 1525699, 1525717, 1525735, 1525753, 1525770, 1525788, 1525806, 1525824, 1525842, 1525860, 1525878, 1525896, 1525913, 1525931, 1525949, 1525967, 1525985, 1526002, 1526020, 1526038, 1526056, 1526073, 1526091, 1526108, 1526126, 1526144, 1526161, 1526179, 1526197, 1526214, 1526232, 1526249, 1526267, 1526284, 1526302, 1526319, 1526337, 1526354, 1526372, 1526389, 1526407, 1526424, 1526442, 1526459, 1526476, 1526494, 1526511, 1526528, 1526546, 1526563, 1526580, 1526598, 1526615, 1526632, 1526649, 1526667, 1526684, 1526701, 1526718, 1526735, 1526753, 1526770, 1526787, 1526804, 1526821, 1526838, 1526855, 1526872, 1526889, 1526906, 1526923, 1526940, 1526957, 1526974, 1526991, 1527008, 1527025, 1527042, 1527059, 1527076, 1527093, 1527110, 1527127, 1527144, 1527161, 1527177, 1527194, 1527211, 1527228, 1527245, 1527261, 1527278, 1527295, 1527312, 1527328,
1527345, 1527363, 1527382, 1527400, 1527418, 1527436, 1527455, 1527473, 1527491, 1527509, 1527527, 1527546, 1527564, 1527582, 1527600, 1527618, 1527636, 1527654, 1527672, 1527690, 1527708, 1527726, 1527744, 1527762, 1527780, 1527798, 1527816, 1527834, 1527852, 1527870, 1527888, 1527905, 1527923, 1527941, 1527959, 1527977, 1527994, 1528012, 1528030, 1528048, 1528066, 1528083, 1528101, 1528119, 1528136, 1528154, 1528172, 1528189, 1528207, 1528224, 1528242, 1528259, 1528277, 1528295, 1528312, 1528330, 1528347, 1528365, 1528382, 1528399, 1528417, 1528434, 1528452, 1528469, 1528486, 1528504, 1528521, 1528539, 1528556, 1528573, 1528591, 1528608, 1528625, 1528642, 1528660, 1528677, 1528694, 1528711, 1528728, 1528746, 1528763, 1528780, 1528797, 1528814, 1528831, 1528848, 1528865, 1528882, 1528899, 1528916, 1528933, 1528950, 1528967, 1528984, 1529001, 1529018, 1529035, 1529052, 1529069, 1529086,
1529103, 1529120, 1529136, 1529153, 1529171, 1529190, 1529208, 1529226, 1529244, 1529262, 1529281, 1529299, 1529317, 1529335, 1529353, 1529371, 1529389, 1529407, 1529425, 1529443, 1529461, 1529479, 1529497, 1529515, 1529533, 1529551, 1529569, 1529587, 1529604, 1529622, 1529640, 1529658, 1529676, 1529693, 1529711, 1529729, 1529747, 1529764, 1529782, 1529800, 1529817, 1529835, 1529853, 1529870, 1529888, 1529906, 1529923, 1529941, 1529958, 1529976, 1529993, 1530011, 1530028, 1530046, 1530063, 1530081, 1530098, 1530116, 1530133, 1530150, 1530168, 1530185, 1530202, 1530220, 1530237, 1530254, 1530272, 1530289, 1530306, 1530323, 1530341, 1530358, 1530375, 1530392, 1530409, 1530427, 1530444, 1530461, 1530478, 1530495, 1530512, 1530529, 1530546, 1530563, 1530580, 1530597, 1530614, 1530631, 1530648, 1530665, 1530682, 1530699, 1530716, 1530733, 1530750, 1530767, 1530784, 1530800, 1530817, 1530835,
1530853, 1530871, 1530890, 1530908, 1530926, 1530944, 1530962, 1530980, 1530998, 1531016, 1531034, 1531052, 1531070, 1531088, 1531105, 1531123, 1531141, 1531159, 1531177, 1531195, 1531213, 1531230, 1531248, 1531266, 1531284, 1531301, 1531319, 1531337, 1531354, 1531372, 1531390, 1531407, 1531425, 1531442, 1531460, 1531478, 1531495, 1531513, 1531530, 1531548, 1531565, 1531583, 1531600, 1531618, 1531635, 1531653, 1531670, 1531687, 1531705, 1531722, 1531739, 1531757, 1531774, 1531791, 1531808, 1531826, 1531843, 1531860, 1531877, 1531895, 1531912, 1531929, 1531946, 1531963, 1531980, 1531998, 1532015, 1532032, 1532049, 1532066, 1532083, 1532100, 1532117, 1532134, 1532151, 1532168, 1532185, 1532202, 1532218, 1532235, 1532252, 1532269, 1532286, 1532303, 1532320, 1532336, 1532353, 1532371, 1532390, 1532408, 1532426, 1532444, 1532462, 1532480, 1532499, 1532517, 1532535, 1532553, 1532571, 1532589,
1532607, 1532625, 1532643, 1532661, 1532679, 1532697, 1532715, 1532732, 1532750, 1532768, 1532786, 1532804, 1532822, 1532839, 1532857, 1532875, 1532893, 1532910, 1532928, 1532946, 1532963, 1532981, 1532999, 1533016, 1533034, 1533051, 1533069, 1533087, 1533104, 1533122, 1533139, 1533157, 1533174, 1533192, 1533209, 1533226, 1533244, 1533261, 1533279, 1533296, 1533313, 1533331, 1533348, 1533365, 1533383, 1533400, 1533417, 1533434, 1533452, 1533469, 1533486, 1533503, 1533520, 1533537, 1533555, 1533572, 1533589, 1533606, 1533623, 1533640, 1533657, 1533674, 1533691, 1533708, 1533725, 1533742, 1533759, 1533776, 1533794, 1533812, 1533830, 1533849, 1533867, 1533885, 1533903, 1533921, 1533939, 1533957, 1533976, 1533994, 1534012, 1534030, 1534048, 1534066, 1534084, 1534102, 1534119, 1534137, 1534155, 1534173, 1534191, 1534209, 1534227, 1534245, 1534262, 1534280, 1534298, 1534316, 1534333, 1534351,
1534369, 1534386, 1534404, 1534422, 1534439, 1534457, 1534475, 1534492, 1534510, 1534527, 1534545, 1534562, 1534580, 1534597, 1534615, 1534632, 1534650, 1534667, 1534684, 1534702, 1534719, 1534736, 1534754, 1534771, 1534788, 1534806, 1534823, 1534840, 1534857, 1534875, 1534892, 1534909, 1534926, 1534943, 1534960, 1534977, 1534994, 1535012, 1535029, 1535046, 1535063, 1535080, 1535097, 1535115, 1535133, 1535151, 1535169, 1535187, 1535206, 1535224, 1535242, 1535260, 1535278, 1535296, 1535314, 1535332, 1535350, 1535368, 1535386, 1535403, 1535421, 1535439, 1535457, 1535475, 1535493, 1535510, 1535528, 1535546, 1535564, 1535581, 1535599, 1535617, 1535634, 1535652, 1535670, 1535687, 1535705, 1535722, 1535740, 1535758, 1535775, 1535793, 1535810, 1535828, 1535845, 1535862, 1535880, 1535897, 1535915, 1535932, 1535949, 1535967, 1535984, 1536001, 1536019, 1536036, 1536053, 1536070, 1536087, 1536105,
1536122, 1536139, 1536156, 1536173, 1536190, 1536208, 1536225, 1536242, 1536259, 1536276, 1536293, 1536310, 1536327, 1536345, 1536363, 1536381, 1536400, 1536418, 1536436, 1536454, 1536472, 1536490, 1536509, 1536527, 1536545, 1536563, 1536581, 1536599, 1536617, 1536635, 1536653, 1536670, 1536688, 1536706, 1536724, 1536742, 1536760, 1536778, 1536795, 1536813, 1536831, 1536849, 1536866, 1536884, 1536902, 1536919, 1536937, 1536955, 1536972, 1536990, 1537007, 1537025, 1537042, 1537060, 1537077, 1537095, 1537112, 1537130, 1537147, 1537165, 1537182, 1537199, 1537217, 1537234, 1537251, 1537269, 1537286, 1537303, 1537320, 1537338, 1537355, 1537372, 1537389, 1537406, 1537423, 1537441, 1537458, 1537475, 1537493, 1537511, 1537529, 1537547, 1537566, 1537584, 1537602, 1537620, 1537638, 1537656, 1537674, 1537692, 1537710, 1537728, 1537746, 1537763, 1537781, 1537799, 1537817, 1537835, 1537853, 1537870,
1537888, 1537906, 1537924, 1537941, 1537959, 1537977, 1537994, 1538012, 1538030, 1538047, 1538065, 1538082, 1538100, 1538117, 1538135, 1538152, 1538170, 1538187, 1538205, 1538222, 1538239, 1538257, 1538274, 1538291, 1538309, 1538326, 1538343, 1538360, 1538378, 1538395, 1538412, 1538429, 1538446, 1538464, 1538481, 1538498, 1538515, 1538532, 1538549, 1538567, 1538585, 1538604, 1538622, 1538640, 1538658, 1538676, 1538694, 1538712, 1538730, 1538748, 1538766, 1538784, 1538802, 1538820, 1538838, 1538856, 1538874, 1538892, 1538910, 1538927, 1538945, 1538963, 1538981, 1538998, 1539016, 1539034, 1539052, 1539069, 1539087, 1539105, 1539122, 1539140, 1539157, 1539175, 1539192, 1539210, 1539227, 1539245, 1539262, 1539280, 1539297, 1539314, 1539332, 1539349, 1539367, 1539384, 1539401, 1539418, 1539436, 1539453, 1539470, 1539487, 1539505, 1539522, 1539539, 1539556, 1539574, 1539592, 1539610, 1539628,
1539646, 1539664, 1539682, 1539700, 1539718, 1539736, 1539754, 1539771, 1539789, 1539807, 1539825, 1539842, 1539860, 1539878, 1539896, 1539913, 1539931, 1539948, 1539966, 1539984, 1540001, 1540019, 1540036, 1540054, 1540071, 1540089, 1540106, 1540124, 1540141, 1540158, 1540176, 1540193, 1540210, 1540228, 1540245, 1540262, 1540280, 1540297, 1540314, 1540331, 1540348, 1540366, 1540383, 1540400, 1540417, 1540434, 1540451, 1540468, 1540485, 1540502, 1540520, 1540538, 1540556, 1540574, 1540592, 1540610, 1540627, 1540645, 1540663, 1540681, 1540699, 1540716, 1540734, 1540752, 1540770, 1540787, 1540805, 1540822, 1540840, 1540858, 1540875, 1540893, 1540910, 1540928, 1540945, 1540963, 1540980, 1540997, 1541015, 1541032, 1541050, 1541067, 1541084, 1541102, 1541119, 1541136, 1541153, 1541171, 1541188, 1541205, 1541222, 1541239, 1541256, 1541273, 1541290, 1541308, 1541325, 1541342, 1541359, 1541376,
1541393, 1541411, 1541429, 1541446, 1541464, 1541482, 1541500, 1541518, 1541536, 1541554, 1541571, 1541589, 1541607, 1541625, 1541643, 1541660, 1541678, 1541695, 1541713, 1541731, 1541748, 1541766, 1541783, 1541801, 1541818, 1541836, 1541853, 1541871, 1541888, 1541906, 1541923, 1541940, 1541958, 1541975, 1541992, 1542010, 1542027, 1542044, 1542061, 1542078, 1542096, 1542113, 1542130, 1542147, 1542164, 1542181, 1542198, 1542215, 1542232, 1542250, 1542268, 1542286, 1542304, 1542322, 1542340, 1542358, 1542376, 1542394, 1542412, 1542430, 1542448, 1542466, 1542484, 1542502, 1542519, 1542537, 1542555, 1542572, 1542590, 1542608, 1542625, 1542643, 1542661, 1542678, 1542696, 1542713, 1542731, 1542748, 1542766, 1542783, 1542801, 1542818, 1542835, 1542853, 1542870, 1542887, 1542905, 1542922, 1542939, 1542956, 1542974, 1542991, 1543008, 1543025, 1543044, 1543062, 1543080, 1543098, 1543117, 1543135,
1543153, 1543171, 1543189, 1543208, 1543226, 1543244, 1543262, 1543280, 1543298, 1543316, 1543334, 1543352, 1543370, 1543388, 1543405, 1543423, 1543441, 1543459, 1543477, 1543494, 1543512, 1543530, 1543547, 1543565, 1543583, 1543600, 1543618, 1543636, 1543653, 1543671, 1543688, 1543706, 1543723, 1543741, 1543758, 1543775, 1543794, 1543812, 1543830, 1543848, 1543866, 1543884, 1543902, 1543921, 1543939, 1543957, 1543975, 1543993, 1544010, 1544028, 1544046, 1544064, 1544082, 1544100, 1544118, 1544135, 1544153, 1544171, 1544189, 1544206, 1544224, 1544242, 1544259, 1544277, 1544294, 1544312, 1544330, 1544347, 1544364, 1544382, 1544399, 1544417, 1544434, 1544451, 1544469, 1544486, 1544504, 1544523, 1544541, 1544559, 1544577, 1544595, 1544613, 1544631, 1544649, 1544667, 1544685, 1544703, 1544721, 1544739, 1544757, 1544774, 1544792, 1544810, 1544828, 1544845, 1544863, 1544881, 1544898, 1544916,
1544934, 1544951, 1544969, 1544986, 1545004, 1545021, 1545039, 1545056, 1545074, 1545091, 1545108, 1545126, 1545143, 1545160, 1545179, 1545197, 1545215, 1545233, 1545251, 1545269, 1545288, 1545306, 1545324, 1545342, 1545360, 1545378, 1545395, 1545413, 1545431, 1545449, 1545467, 1545485, 1545503, 1545520, 1545538, 1545556, 1545573, 1545591, 1545609, 1545626, 1545644, 1545661, 1545679, 1545696, 1545714, 1545731, 1545749, 1545766, 1545784, 1545801, 1545819, 1545838, 1545856, 1545874, 1545893, 1545911, 1545929, 1545947, 1545965, 1545983, 1546002, 1546020, 1546038, 1546056, 1546074, 1546092, 1546110, 1546127, 1546145, 1546163, 1546181, 1546199, 1546217, 1546234, 1546252, 1546270, 1546287, 1546305, 1546323, 1546340, 1546358, 1546375, 1546393, 1546410, 1546428, 1546446, 1546464, 1546482, 1546500, 1546518, 1546536, 1546554, 1546571, 1546589, 1546607, 1546625, 1546642, 1546660, 1546678, 1546695,
1546713, 1546730, 1546748, 1546766, 1546783, 1546800, 1546818, 1546835, 1546853, 1546870, 1546887, 1546905, 1546922, 1546939, 1546956, 1546974, 1546991, 1547009, 1547027, 1547045, 1547064, 1547082, 1547100, 1547118, 1547136, 1547154, 1547172, 1547190, 1547208, 1547226, 1547244, 1547262, 1547280, 1547297, 1547315, 1547333, 1547351, 1547369, 1547386, 1547404, 1547422, 1547439, 1547457, 1547474, 1547492, 1547509, 1547527, 1547544, 1547562, 1547580, 1547598, 1547616, 1547634, 1547652, 1547670, 1547688, 1547705, 1547723, 1547741, 1547758, 1547776, 1547794, 1547811, 1547829, 1547847, 1547864, 1547882, 1547899, 1547917, 1547934, 1547951, 1547969, 1547986, 1548003, 1548021, 1548038, 1548055, 1548072, 1548091, 1548109, 1548128, 1548146, 1548164, 1548183, 1548201, 1548219, 1548237, 1548255, 1548274, 1548292, 1548310, 1548328, 1548346, 1548364, 1548382, 1548400, 1548417, 1548435, 1548453, 1548471,
1548489, 1548506, 1548524, 1548542, 1548560, 1548577, 1548596, 1548614, 1548632, 1548650, 1548668, 1548686, 1548704, 1548723, 1548741, 1548759, 1548777, 1548794, 1548812, 1548830, 1548848, 1548866, 1548884, 1548902, 1548919, 1548937, 1548955, 1548972, 1548990, 1549008, 1549025, 1549043, 1549060, 1549078, 1549096, 1549114, 1549133, 1549151, 1549169, 1549187, 1549204, 1549222, 1549240, 1549258, 1549276, 1549294, 1549311, 1549329, 1549347, 1549365, 1549382, 1549400, 1549417, 1549435, 1549453, 1549470, 1549488, 1549505, 1549522, 1549540, 1549559, 1549577, 1549595, 1549612, 1549630, 1549648, 1549666, 1549684, 1549702, 1549720, 1549737, 1549755, 1549773, 1549790, 1549808, 1549826, 1549843, 1549861, 1549878, 1549896, 1549913, 1549931, 1549948, 1549965, 1549984, 1550002, 1550020, 1550038, 1550055, 1550073, 1550091, 1550109, 1550127, 1550145, 1550162, 1550180, 1550198, 1550216, 1550233, 1550251,
1550268, 1550286, 1550303, 1550321, 1550338, 1550356, 1550373, 1550390, 1550409, 1550427, 1550445, 1550463, 1550481, 1550499, 1550516, 1550534, 1550552, 1550570, 1550588, 1550605, 1550623, 1550641, 1550658, 1550676, 1550694, 1550711, 1550729, 1550746, 1550764, 1550781, 1550799, 1550817, 1550835, 1550853, 1550871, 1550889, 1550907, 1550925, 1550943, 1550961, 1550979, 1550996, 1551014, 1551032, 1551050, 1551067, 1551085, 1551103, 1551120, 1551138, 1551156, 1551173, 1551190, 1551209, 1551227, 1551245, 1551263, 1551282, 1551300, 1551318, 1551336, 1551354, 1551372, 1551390, 1551408, 1551426, 1551443, 1551461, 1551479, 1551497, 1551514, 1551532, 1551550, 1551567, 1551586, 1551604, 1551623, 1551641, 1551659, 1551678, 1551696, 1551714, 1551732, 1551751, 1551769, 1551787, 1551805, 1551823, 1551841, 1551859, 1551877, 1551895, 1551912, 1551930, 1551948, 1551966, 1551983, 1552001, 1552019, 1552036,
1552054, 1552071, 1552089, 1552106, 1552124, 1552141, 1552159, 1552176, 1552193, 1552211, 1552228, 1552245, 1552262, 1552279, 1552297, 1552315, 1552333, 1552351, 1552369, 1552387, 1552405, 1552423, 1552440, 1552458, 1552476, 1552493, 1552511, 1552529, 1552546, 1552564, 1552581, 1552599, 1552616, 1552634, 1552653, 1552671, 1552689, 1552707, 1552726, 1552744, 1552762, 1552780, 1552798, 1552816, 1552834, 1552852, 1552869, 1552887, 1552905, 1552923, 1552941, 1552959, 1552978, 1552997, 1553015, 1553034, 1553052, 1553071, 1553089, 1553108, 1553126, 1553145, 1553163, 1553181, 1553199, 1553218, 1553236, 1553254, 1553272, 1553290, 1553308, 1553326, 1553344, 1553362, 1553380, 1553397, 1553415, 1553433, 1553451, 1553468, 1553486, 1553504, 1553521, 1553539, 1553556, 1553575, 1553593, 1553612, 1553630, 1553649, 1553667, 1553685, 1553704, 1553722, 1553740, 1553758, 1553776, 1553794, 1553812, 1553830,
1553848, 1553866, 1553884, 1553902, 1553920, 1553938, 1553955, 1553973, 1553991, 1554008, 1554026, 1554044, 1554061, 1554078, 1554096, 1554113, 1554131, 1554149, 1554168, 1554186, 1554204, 1554223, 1554241, 1554259, 1554278, 1554296, 1554314, 1554332, 1554350, 1554368, 1554386, 1554404, 1554422, 1554440, 1554457, 1554475, 1554493, 1554511, 1554528, 1554546, 1554563, 1554581, 1554599, 1554616, 1554633, 1554651, 1554668, 1554687, 1554705, 1554724, 1554742, 1554761, 1554779, 1554797, 1554816, 1554834, 1554852, 1554870, 1554888, 1554906, 1554924, 1554942, 1554960, 1554978, 1554996, 1555014, 1555031, 1555049, 1555067, 1555084, 1555102, 1555120, 1555137, 1555155, 1555172, 1555191, 1555210, 1555228, 1555247, 1555265, 1555284, 1555302, 1555321, 1555339, 1555358, 1555376, 1555394, 1555412, 1555431, 1555449, 1555467, 1555485, 1555503, 1555521, 1555539, 1555557, 1555575, 1555592, 1555610, 1555628,
1555645, 1555665, 1555684, 1555703, 1555722, 1555740, 1555759, 1555778, 1555797, 1555816, 1555834, 1555853, 1555872, 1555890, 1555909, 1555927, 1555945, 1555964, 1555982, 1556000, 1556019, 1556037, 1556055, 1556073, 1556091, 1556109, 1556127, 1556145, 1556163, 1556181, 1556198, 1556216, 1556234, 1556251, 1556269, 1556287, 1556304, 1556323, 1556342, 1556361, 1556380, 1556399, 1556418, 1556437, 1556455, 1556474, 1556493, 1556511, 1556530, 1556548, 1556567, 1556585, 1556603, 1556622, 1556640, 1556658, 1556676, 1556694, 1556712, 1556730, 1556748, 1556766, 1556784, 1556802, 1556820, 1556837, 1556855, 1556873, 1556890, 1556908, 1556927, 1556946, 1556965, 1556985, 1557004, 1557023, 1557042, 1557060, 1557079, 1557098, 1557117, 1557135, 1557154, 1557173, 1557191, 1557210, 1557228, 1557247, 1557265, 1557283, 1557301, 1557319, 1557338, 1557356, 1557374, 1557392, 1557410, 1557428, 1557446, 1557463,
1557481, 1557499, 1557516, 1557534, 1557552, 1557569, 1557587, 1557604, 1557621, 1557639, 1557658, 1557677, 1557696, 1557715, 1557734, 1557753, 1557772, 1557791, 1557810, 1557828, 1557847, 1557865, 1557884, 1557903, 1557921, 1557939, 1557958, 1557976, 1557994, 1558012, 1558031, 1558049, 1558067, 1558085, 1558103, 1558120, 1558138, 1558156, 1558174, 1558191, 1558209, 1558227, 1558244, 1558262, 1558279, 1558296, 1558316, 1558335, 1558355, 1558374, 1558393, 1558413, 1558432, 1558451, 1558470, 1558489, 1558508, 1558526, 1558545, 1558564, 1558583, 1558601, 1558620, 1558638, 1558657, 1558675, 1558694, 1558712, 1558730, 1558748, 1558766, 1558784, 1558802, 1558820, 1558838, 1558856, 1558874, 1558892, 1558909, 1558927, 1558945, 1558962, 1558979, 1558997, 1559014, 1559032, 1559051, 1559071, 1559091, 1559110, 1559130, 1559149, 1559168, 1559188, 1559207, 1559226, 1559245, 1559264, 1559283, 1559302,
1559321, 1559340, 1559358, 1559377, 1559396, 1559414, 1559433, 1559451, 1559469, 1559488, 1559506, 1559524, 1559542, 1559560, 1559578, 1559596, 1559614, 1559632, 1559650, 1559668, 1559685, 1559706, 1559726, 1559747, 1559767, 1559787, 1559807, 1559827, 1559847, 1559867, 1559887, 1559907, 1559927, 1559946, 1559966, 1559985, 1560005, 1560024, 1560044, 1560063, 1560082, 1560101, 1560120, 1560139, 1560158, 1560177, 1560196, 1560214, 1560233, 1560251, 1560270, 1560288, 1560307, 1560325, 1560343, 1560361, 1560379, 1560398, 1560416, 1560433, 1560451, 1560469, 1560487, 1560505, 1560522, 1560540, 1560557, 1560575, 1560592, 1560613, 1560634, 1560654, 1560675, 1560695, 1560716, 1560736, 1560756, 1560776, 1560796, 1560816, 1560836, 1560856, 1560876, 1560895, 1560915, 1560934, 1560954, 1560973, 1560992, 1561011, 1561030, 1561050, 1561069, 1561087, 1561106, 1561125, 1561144, 1561162, 1561181, 1561199,
1561218, 1561236, 1561254, 1561272, 1561290, 1561308, 1561326, 1561344, 1561362, 1561380, 1561398, 1561415, 1561433, 1561450, 1561472, 1561494, 1561515, 1561537, 1561558, 1561579, 1561601, 1561622, 1561643, 1561664, 1561684, 1561705, 1561726, 1561746, 1561767, 1561787, 1561807, 1561827, 1561848, 1561867, 1561887, 1561907, 1561927, 1561946, 1561966, 1561985, 1562005, 1562024, 1562043, 1562062, 1562081, 1562100, 1562119, 1562138, 1562157, 1562175, 1562194, 1562212, 1562231, 1562249, 1562267, 1562285, 1562304, 1562321, 1562339, 1562357, 1562375, 1562393, 1562410, 1562428, 1562445, 1562463, 1562486, 1562509, 1562532, 1562554, 1562577, 1562599, 1562622, 1562644, 1562666, 1562688, 1562710, 1562731, 1562753, 1562775, 1562796, 1562817, 1562838, 1562860, 1562880, 1562901, 1562922, 1562943, 1562963, 1562983, 1563004, 1563024, 1563044, 1563064, 1563084, 1563104, 1563123, 1563143, 1563162, 1563182,
1563201, 1563220, 1563239, 1563258, 1563277, 1563296, 1563315, 1563333, 1563352, 1563370, 1563389, 1563407, 1563425, 1563443, 1563461, 1563479, 1563497, 1563514, 1563532, 1563550, 1563576, 1563602, 1563627, 1563653, 1563678, 1563704, 1563729, 1563754, 1563778, 1563803, 1563827, 1563851, 1563876, 1563899, 1563923, 1563947, 1563970, 1563993, 1564016, 1564039, 1564062, 1564085, 1564107, 1564129, 1564151, 1564173, 1564195, 1564217, 1564239, 1564260, 1564281, 1564302, 1564323, 1564344, 1564365, 1564386, 1564406, 1564427, 1564447, 1564467, 1564487, 1564507, 1564526, 1564546, 1564565, 1564585, 1564604, 1564623, 1564642, 1564661, 1564680, 1564698, 1564717, 1564735, 1564754, 1564772, 1564790, 1564808, 1564826, 1564844, 1564861, 1564879, 1564913, 1564948, 1564982, 1565016, 1565049, 1565082, 1565114, 1565146, 1565178, 1565209, 1565240, 1565271, 1565301, 1565331, 1565361, 1565390, 1565420, 1565448,
1565477, 1565505, 1565533, 1565560, 1565587, 1565615, 1565641, 1565668, 1565694, 1565720, 1565745, 1565771, 1565796, 1565821, 1565845, 1565870, 1565894, 1565918, 1565942, 1565965, 1565988, 1566011, 1566034, 1566056, 1566079, 1566101, 1566123, 1566145, 1566166, 1566188, 1566209, 1566230, 1566250, 1566271, 1566291, 1566312, 1566332, 1566351, 1566371, 1566391, 1566410, 1566429, 1566448, 1566467, 1566486, 1566504, 1566522, 1566541, 1566559, 1566576, 1566594, 1566612, 1566629, 1566646, 1566664, 1566681, 1566697, 1566714, 1566731, 1566747, 1566764, 1566780, 1566796, 1566812, 1566828, 1566843, 1566859, 1566874, 1566890, 1566905, 1566920, 1566935, 1566950, 1566964, 1566979, 1566994, 1567008, 1567022, 1567036, 1567051, 1567065, 1567078, 1567092, 1567106, 1567119, 1567133, 1567146, 1567160, 1567173, 1567186, 1567199, 1567212, 1567224, 1567237, 1567250, 1567262, 1567275, 1567287, 1567299, 1567312,
1567324, 1567336, 1567348, 1567359, 1567371, 1567383, 1567394, 1567406, 1567417, 1567429, 1567440, 1567451, 1567463, 1567474, 1567485, 1567496, 1567506, 1567517, 1567528, 1567538, 1567549, 1567560, 1567570, 1567580, 1567591, 1567601, 1567611, 1567621, 1567631, 1567641, 1567651, 1567661, 1567671, 1567681, 1567690, 1567700, 1567709, 1567719, 1567728, 1567738, 1567747, 1567756, 1567766, 1567775, 1567784, 1567793, 1567802, 1567811, 1567820, 1567829, 1567837, 1567846, 1567855, 1567863, 1567872, 1567880, 1567889, 1567897, 1567906, 1567914, 1567922, 1567931, 1567939, 1567947, 1567955, 1567963, 1567971, 1567979, 1567987, 1567995, 1568003, 1568010, 1568018, 1568026, 1568033, 1568041, 1568049, 1568056, 1568064, 1568071, 1568078, 1568086, 1568093, 1568100, 1568108, 1568115, 1568122, 1568129, 1568136, 1568143, 1568150, 1568157, 1568164, 1568171, 1568178, 1568185, 1568192, 1568198, 1568205, 1568212,
1568219, 1568225, 1568232, 1568238, 1568245, 1568251, 1568258, 1568264, 1568271, 1568277, 1568283, 1568290, 1568296, 1568302, 1568308, 1568314, 1568321, 1568327, 1568333, 1568339, 1568345, 1568351, 1568357, 1568363, 1568369, 1568374, 1568380, 1568386, 1568392, 1568398, 1568403, 1568409, 1568415, 1568421, 1568426, 1568432, 1568437, 1568443, 1568448, 1568454, 1568459, 1568465, 1568470, 1568476, 1568481, 1568486, 1568492, 1568497, 1568502, 1568508, 1568513, 1568518, 1568523, 1568528, 1568533, 1568539, 1568544, 1568549, 1568554, 1568559, 1568564, 1568569, 1568574, 1568579, 1568583, 1568588, 1568593, 1568598, 1568603, 1568608, 1568612, 1568617, 1568622, 1568627, 1568631, 1568636, 1568641, 1568645, 1568650, 1568655, 1568659, 1568664, 1568668, 1568673, 1568677, 1568682, 1568686, 1568691, 1568695, 1568699, 1568704, 1568708, 1568712, 1568717, 1568721, 1568725, 1568730, 1568734, 1568738, 1568742,
1568747, 1568751, 1568755, 1568759, 1568763, 1568767, 1568772, 1568776, 1568780, 1568784, 1568788, 1568792, 1568796, 1568800, 1568804, 1568808, 1568812, 1568816, 1568819, 1568823, 1568827, 1568831, 1568835, 1568839, 1568843, 1568847, 1568850, 1568854, 1568858, 1568862, 1568865, 1568869, 1568873, 1568876, 1568880, 1568884, 1568887, 1568891, 1568895, 1568898, 1568902, 1568905, 1568909, 1568913, 1568916, 1568920, 1568923, 1568927, 1568930, 1568934, 1568937, 1568940, 1568944, 1568947, 1568951, 1568954, 1568958, 1568961, 1568964, 1568968, 1568971, 1568974, 1568978, 1568981, 1568984, 1568987, 1568991, 1568994, 1568997, 1569000, 1569004, 1569007, 1569010, 1569013, 1569016, 1569020, 1569023, 1569026, 1569029, 1569032, 1569035, 1569038, 1569041, 1569045, 1569048, 1569051, 1569054, 1569057, 1569060, 1569063, 1569066, 1569069, 1569072, 1569075, 1569078, 1569081, 1569084, 1569086, 1569089, 1569092,
1569095, 1569098, 1569101, 1569104, 1569107, 1569110, 1569112, 1569115, 1569118, 1569121, 1569124, 1569126, 1569129, 1569132, 1569135, 1569137, 1569140, 1569143, 1569146, 1569148, 1569151, 1569154, 1569157, 1569159, 1569162, 1569164, 1569167, 1569170, 1569172, 1569175, 1569178, 1569180, 1569183, 1569185, 1569188, 1569191, 1569193, 1569196, 1569198, 1569201, 1569203, 1569206, 1569208, 1569211, 1569214, 1569216, 1569218, 1569221, 1569223, 1569226, 1569228, 1569231, 1569233, 1569236, 1569238, 1569241, 1569243, 1569245, 1569248, 1569250, 1569253, 1569255, 1569257, 1569260, 1569262, 1569264, 1569267, 1569269, 1569271, 1569274, 1569276, 1569278, 1569281, 1569283, 1569285, 1569288, 1569290, 1569292, 1569294, 1569297, 1569299, 1569301, 1569303, 1569306, 1569308, 1569310, 1569312, 1569314, 1569316, 1569319, 1569321, 1569323, 1569325, 1569327, 1569330, 1569332, 1569334, 1569336, 1569338, 1569340,
1569342, 1569344, 1569347, 1569349, 1569351, 1569353, 1569355, 1569357, 1569359, 1569361, 1569363, 1569365, 1569367, 1569369, 1569371, 1569373, 1569375, 1569377, 1569379, 1569381, 1569383, 1569385, 1569387, 1569389, 1569391, 1569393, 1569395, 1569397, 1569399, 1569401, 1569403, 1569405, 1569407, 1569409, 1569411, 1569413, 1569415, 1569416, 1569418, 1569420, 1569422, 1569424, 1569426, 1569428, 1569430, 1569432, 1569433, 1569435, 1569437, 1569439, 1569441, 1569443, 1569445, 1569446, 1569448, 1569450, 1569452, 1569454, 1569455, 1569457, 1569459, 1569461, 1569463, 1569464, 1569466, 1569468, 1569470, 1569471, 1569473, 1569475, 1569477, 1569478, 1569480, 1569482, 1569483, 1569485, 1569487, 1569489, 1569490, 1569492, 1569494, 1569495, 1569497, 1569499, 1569501, 1569502, 1569504, 1569506, 1569507, 1569509, 1569510, 1569512, 1569514, 1569515, 1569517, 1569519, 1569520, 1569522, 1569524, 1569525,
1569527, 1569528, 1569530, 1569532, 1569533, 1569535, 1569536, 1569538, 1569540, 1569541, 1569543, 1569544, 1569546, 1569547, 1569549, 1569550, 1569552, 1569554, 1569555, 1569557, 1569558, 1569560, 1569561, 1569563, 1569564, 1569566, 1569567, 1569569, 1569570, 1569572, 1569573, 1569575, 1569576, 1569578, 1569579, 1569581, 1569582, 1569584, 1569585, 1569587, 1569588, 1569590, 1569591, 1569592, 1569594, 1569595, 1569597, 1569598, 1569600, 1569601, 1569602, 1569604, 1569605, 1569607, 1569608, 1569610, 1569611, 1569612, 1569614, 1569615, 1569617, 1569618, 1569619, 1569621, 1569622, 1569623, 1569625, 1569626, 1569628, 1569629, 1569630, 1569632, 1569633, 1569634, 1569636, 1569637, 1569638, 1569640, 1569641, 1569642, 1569644, 1569645, 1569646, 1569648, 1569649, 1569650, 1569652, 1569653, 1569654, 1569656, 1569657, 1569658, 1569659, 1569661, 1569662, 1569663, 1569665, 1569666, 1569667, 1569668,
1569670, 1569671, 1569672, 1569674, 1569675, 1569676, 1569677, 1569679, 1569680, 1569681, 1569682, 1569684, 1569685, 1569686, 1569687, 1569688, 1569690, 1569691, 1569692, 1569693, 1569694, 1569696, 1569697, 1569698, 1569699, 1569701, 1569702, 1569703, 1569704, 1569705, 1569707, 1569708, 1569709, 1569710, 1569711, 1569712, 1569714, 1569715, 1569716, 1569717, 1569718, 1569719, 1569721, 1569722, 1569723, 1569724, 1569725, 1569726, 1569727, 1569729, 1569730, 1569731, 1569732, 1569733, 1569734, 1569735, 1569736, 1569738, 1569739, 1569740, 1569741, 1569742, 1569743, 1569744, 1569745, 1569746, 1569748, 1569749, 1569750, 1569751, 1569752, 1569753, 1569754, 1569755, 1569756, 1569757, 1569759, 1569760, 1569761, 1569762, 1569763, 1569764, 1569765, 1569766, 1569767, 1569768, 1569769, 1569770, 1569771, 1569772, 1569773, 1569774, 1569775, 1569777, 1569777, 1569779, 1569780, 1569781, 1569782, 1569783,
1569784, 1569785, 1569786, 1569787, 1569788, 1569789, 1569790, 1569791, 1569792, 1569793, 1569794, 1569795, 1569796, 785398
};
}
}
@@ -1,12 +1,14 @@
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Lockstep.CodeGenerator
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTCos
@@ -1,12 +1,14 @@
//#define DONT_USE_GENERATE_CODE
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Lockstep.CodeGenerator
// This code was generated by JNGame.CodeGenerator
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using JNGame.Math;
namespace JNGame.Math
{
public static class LUTSin
File diff suppressed because one or more lines are too long
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: e2e8e2468b4384e4694aaf2becdfb0c3
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -38,7 +38,6 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 705507994}
m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
@@ -104,7 +103,7 @@ NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
@@ -117,7 +116,7 @@ NavMeshSettings:
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
@@ -159,7 +158,7 @@ MonoBehaviour:
m_BlockingObjects: 0
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
m_Bits: 55
--- !u!114 &61202612
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -202,6 +201,7 @@ Canvas:
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 0
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 0
m_TargetDisplay: 0
@@ -224,7 +224,6 @@ RectTransform:
- {fileID: 569553488}
- {fileID: 1531590483}
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
@@ -279,7 +278,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 61202614}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -375,6 +373,7 @@ MonoBehaviour:
ModeOverride: 0
LensShift: {x: 0, y: 0}
GateFit: 2
FocusDistance: 10
m_SensorSize: {x: 1, y: 1}
m_Transitions:
m_BlendHint: 0
@@ -456,6 +455,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 181717978}
serializedVersion: 2
m_LocalRotation: {x: -0.26082727, y: -0.5956457, z: 0.21305256, w: -0.7292352}
m_LocalPosition: {x: -26.9086, y: 45.025208, z: 20.71292}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -465,7 +465,6 @@ Transform:
- {fileID: 489189100}
- {fileID: 1154405771}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: -89.846, z: 0}
--- !u!1 &222420976
GameObject:
@@ -498,7 +497,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 61202614}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -572,13 +570,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 289208754}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 966399671}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!154 &289208756
TerrainCollider:
@@ -588,7 +586,16 @@ TerrainCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 289208754}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 2
m_TerrainData: {fileID: 15600000, guid: b9ffe249355d38f4ea060619fe145b79, type: 2}
m_EnableTreeColliders: 1
--- !u!218 &289208757
@@ -609,22 +616,28 @@ Terrain:
m_DetailObjectDensity: 1
m_HeightmapPixelError: 5
m_SplatMapDistance: 1000
m_HeightmapMinimumLODSimplification: 0
m_HeightmapMaximumLOD: 0
m_ShadowCastingMode: 2
m_DrawHeightmap: 1
m_DrawInstanced: 0
m_DrawTreesAndFoliage: 1
m_StaticShadowCaster: 0
m_IgnoreQualitySettings: 0
m_ReflectionProbeUsage: 1
m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0}
m_BakeLightProbesForTrees: 1
m_PreserveTreePrototypeLayers: 0
m_DeringLightProbesForTrees: 1
m_ReceiveGI: 1
m_ScaleInLightmap: 0.0256
m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0}
m_GroupingID: 0
m_RenderingLayerMask: 1
m_AllowAutoConnect: 1
m_EnableHeightmapRayTracing: 1
m_EnableTreesAndDetailsRayTracing: 0
m_TreeMotionVectorModeOverride: 3
--- !u!1 &332652183
GameObject:
m_ObjectHideFlags: 3
@@ -651,13 +664,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 332652183}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 489189100}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &332652185
MonoBehaviour:
@@ -776,6 +789,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 400944144}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0.000000059604645, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -783,7 +797,6 @@ Transform:
m_Children:
- {fileID: 1849954841}
m_Father: {fileID: 181717980}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &400944146
MonoBehaviour:
@@ -821,6 +834,7 @@ MonoBehaviour:
ModeOverride: 0
LensShift: {x: 0, y: 0}
GateFit: 2
FocusDistance: 10
m_SensorSize: {x: 1, y: 1}
m_Transitions:
m_BlendHint: 0
@@ -856,13 +870,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 441433885}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1154405771}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &441433887
MonoBehaviour:
@@ -981,6 +995,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 489189099}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -988,7 +1003,6 @@ Transform:
m_Children:
- {fileID: 332652184}
m_Father: {fileID: 181717980}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &489189101
MonoBehaviour:
@@ -1026,6 +1040,7 @@ MonoBehaviour:
ModeOverride: 0
LensShift: {x: 0, y: 0}
GateFit: 2
FocusDistance: 10
m_SensorSize: {x: 1, y: 1}
m_Transitions:
m_BlendHint: 0
@@ -1075,13 +1090,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 492996330}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &569553487
GameObject:
@@ -1116,7 +1131,6 @@ RectTransform:
m_Children:
- {fileID: 1780905642}
m_Father: {fileID: 61202614}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -1248,7 +1262,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 739776926}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 0, y: 0.5}
@@ -1324,7 +1337,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1531590483}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -1459,13 +1471,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705507993}
serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &711409931
GameObject:
@@ -1491,6 +1503,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 711409931}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -1498,7 +1511,6 @@ Transform:
m_Children:
- {fileID: 966399671}
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &711409933
MonoBehaviour:
@@ -1548,7 +1560,6 @@ RectTransform:
- {fileID: 693424984}
- {fileID: 784179391}
m_Father: {fileID: 1877206257}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
@@ -1634,7 +1645,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 739776926}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -1716,7 +1726,6 @@ RectTransform:
m_Children:
- {fileID: 1873991747}
m_Father: {fileID: 61202614}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -1851,7 +1860,6 @@ RectTransform:
- {fileID: 1621253169}
- {fileID: 1837040637}
m_Father: {fileID: 1531590483}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
@@ -1950,6 +1958,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 966399670}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -1957,7 +1966,6 @@ Transform:
m_Children:
- {fileID: 289208755}
m_Father: {fileID: 711409932}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &966399672
MonoBehaviour:
@@ -1980,6 +1988,7 @@ MonoBehaviour:
m_Bits: 4294967295
m_UseGeometry: 0
m_DefaultArea: 0
m_GenerateLinks: 0
m_IgnoreNavMeshAgent: 1
m_IgnoreNavMeshObstacle: 1
m_OverrideTileSize: 1
@@ -2020,7 +2029,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 739776926}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2125,13 +2133,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1088287025}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1154405769
GameObject:
@@ -2186,6 +2194,7 @@ MonoBehaviour:
ModeOverride: 0
LensShift: {x: 0, y: 0}
GateFit: 2
FocusDistance: 10
m_SensorSize: {x: 1, y: 1}
m_Transitions:
m_BlendHint: 0
@@ -2202,6 +2211,7 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1154405769}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -2209,7 +2219,6 @@ Transform:
m_Children:
- {fileID: 441433886}
m_Father: {fileID: 181717980}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1187505147
GameObject:
@@ -2236,13 +2245,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1187505147}
serializedVersion: 2
m_LocalRotation: {x: -0.26082727, y: -0.5956457, z: 0.21305256, w: -0.7292352}
m_LocalPosition: {x: -26.908585, y: 45.025223, z: 20.71292}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!20 &1187505150
Camera:
@@ -2258,9 +2267,17 @@ Camera:
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_Iso: 200
m_ShutterSpeed: 0.005
m_Aperture: 16
m_FocusDistance: 10
m_FocalLength: 50
m_BladeCount: 5
m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25
m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
@@ -2351,7 +2368,6 @@ RectTransform:
m_Children:
- {fileID: 2058336311}
m_Father: {fileID: 1837040637}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2389,7 +2405,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1531590483}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
@@ -2469,7 +2484,6 @@ RectTransform:
- {fileID: 1498355245}
- {fileID: 905393663}
m_Father: {fileID: 61202614}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
@@ -2612,7 +2626,6 @@ RectTransform:
m_Children:
- {fileID: 1877206257}
m_Father: {fileID: 905393663}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2701,7 +2714,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1983202942}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2781,7 +2793,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 569553488}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2863,7 +2874,6 @@ RectTransform:
m_Children:
- {fileID: 1471734305}
m_Father: {fileID: 905393663}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -2983,13 +2993,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1849954840}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 400944145}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1849954842
MonoBehaviour:
@@ -3115,7 +3125,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 898699214}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@@ -3194,7 +3203,6 @@ RectTransform:
m_Children:
- {fileID: 739776926}
m_Father: {fileID: 1621253169}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
@@ -3234,7 +3242,6 @@ RectTransform:
m_Children:
- {fileID: 1684779459}
m_Father: {fileID: 61202614}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
@@ -3366,7 +3373,6 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1471734305}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0.2}
@@ -3411,3 +3417,14 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2058336310}
m_CullTransparentMesh: 1
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
m_Roots:
- {fileID: 1187505149}
- {fileID: 181717980}
- {fileID: 705507995}
- {fileID: 492996332}
- {fileID: 711409932}
- {fileID: 61202614}
- {fileID: 1088287028}
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c2e7814c3ee7c6c489dcf0aff4116ab4
guid: e217f3b4d6de86e4d978c3ee3754437a
TextScriptImporter:
externalObjects: {}
userData:
File diff suppressed because one or more lines are too long
@@ -15,5 +15,10 @@ namespace BehaviorTreeSlayer
rd.material.color = color;
return base.Tick(dt, args);
}
public override string ToString()
{
return $"颜色";
}
}
}
@@ -1129,7 +1129,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
AutoRun: 1
config: {fileID: 4900000, guid: efbb9ae85b44479fac84562240d86ac3, type: 3}
config: {fileID: 4900000, guid: 2ae8dd65757eda9499fd4559acc7d26f, type: 3}
Obj:
- {fileID: 716990035}
--- !u!4 &1742566310

Some files were not shown because too many files have changed in this diff Show More