Compare commits
11 Commits
main
...
c3be8f60b7
Author | SHA1 | Date | |
---|---|---|---|
c3be8f60b7 | |||
33cb44bf36 | |||
4c1018ddec | |||
cf7061fd58 | |||
e6b7b9953f | |||
4a3775a0de | |||
4d353662a1 | |||
ca0b2de917 | |||
2335c3ec62 | |||
30ccab1b93 | |||
f56d6a7fc8 |
@@ -10,6 +10,10 @@ public class FileLogger : LoggerBase
|
|||||||
public FileLogger(string filePath)
|
public FileLogger(string filePath)
|
||||||
{
|
{
|
||||||
FilePath = filePath;
|
FilePath = filePath;
|
||||||
|
|
||||||
|
if (Path.GetDirectoryName(filePath) is string directoryPath)
|
||||||
|
Directory.CreateDirectory(directoryPath);
|
||||||
|
|
||||||
File.Open(filePath, FileMode.Create).Close();
|
File.Open(filePath, FileMode.Create).Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
9
Engine.Core/Debug/LoggerContainer.cs
Normal file
9
Engine.Core/Debug/LoggerContainer.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public class LoggerContainer : Behaviour, ILogger
|
||||||
|
{
|
||||||
|
public ILogger Logger { get; set; } = new ConsoleLogger();
|
||||||
|
|
||||||
|
public ILogger.Level FilterLevel { get => Logger.FilterLevel; set => Logger.FilterLevel = value; }
|
||||||
|
public void Log(string message, ILogger.Level level = ILogger.Level.Info, bool force = false) => Logger.Log(message, level, force);
|
||||||
|
}
|
23
Engine.Core/Debug/LoggerWrapper.cs
Normal file
23
Engine.Core/Debug/LoggerWrapper.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
namespace Syntriax.Engine.Core.Debug;
|
||||||
|
|
||||||
|
public class LoggerWrapper(ILogger firstLogger, ILogger secondLogger) : ILogger
|
||||||
|
{
|
||||||
|
private readonly ILogger firstLogger = firstLogger;
|
||||||
|
private readonly ILogger secondLogger = secondLogger;
|
||||||
|
|
||||||
|
public ILogger.Level FilterLevel
|
||||||
|
{
|
||||||
|
get => firstLogger.FilterLevel;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
firstLogger.FilterLevel = value;
|
||||||
|
secondLogger.FilterLevel = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Log(string message, ILogger.Level level = ILogger.Level.Info, bool force = false)
|
||||||
|
{
|
||||||
|
firstLogger.Log(message, level, force);
|
||||||
|
secondLogger.Log(message, level, force);
|
||||||
|
}
|
||||||
|
}
|
@@ -31,10 +31,10 @@ public class ListPool<T> : IPool<List<T>>
|
|||||||
OnReturned?.Invoke(this, list);
|
OnReturned?.Invoke(this, list);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListPool(Func<List<T>> generator, int initialCapacity = 1)
|
public ListPool(int initialListCount = 1, int initialListCapacity = 32)
|
||||||
{
|
{
|
||||||
this.generator = generator;
|
generator = () => new(initialListCapacity);
|
||||||
for (int i = 0; i < initialCapacity; i++)
|
for (int i = 0; i < initialListCount; i++)
|
||||||
queue.Enqueue(generator());
|
queue.Enqueue(generator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -63,12 +63,6 @@ public readonly struct AABB(Vector2D lowerBoundary, Vector2D upperBoundary)
|
|||||||
return new(lowerBoundary, upperBoundary);
|
return new(lowerBoundary, upperBoundary);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="AABB"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="AABB"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(AABB)}({LowerBoundary}, {UpperBoundary})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if two <see cref="AABB"/>s are approximately equal.
|
/// Checks if two <see cref="AABB"/>s are approximately equal.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -78,6 +72,25 @@ public readonly struct AABB(Vector2D lowerBoundary, Vector2D upperBoundary)
|
|||||||
/// <returns><see cref="true"/> if the <see cref="AABB"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the <see cref="AABB"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
||||||
public static bool ApproximatelyEquals(AABB left, AABB right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(AABB left, AABB right, float epsilon = float.Epsilon)
|
||||||
=> left.LowerBoundary.ApproximatelyEquals(right.LowerBoundary, epsilon) && left.UpperBoundary.ApproximatelyEquals(right.UpperBoundary, epsilon);
|
=> left.LowerBoundary.ApproximatelyEquals(right.LowerBoundary, epsilon) && left.UpperBoundary.ApproximatelyEquals(right.UpperBoundary, epsilon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="AABB"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="AABB"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="AABB"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is AABB aabb && LowerBoundary.Equals(aabb.LowerBoundary) && UpperBoundary.Equals(aabb.UpperBoundary);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="AABB"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="AABB"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(LowerBoundary, UpperBoundary);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="AABB"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="AABB"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(AABB)}({LowerBoundary}, {UpperBoundary})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -77,6 +77,25 @@ public readonly struct Circle(Vector2D center, float radius)
|
|||||||
/// <returns><see cref="true"/> if the <see cref="Circle"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the <see cref="Circle"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
||||||
public static bool ApproximatelyEquals(Circle left, Circle right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Circle left, Circle right, float epsilon = float.Epsilon)
|
||||||
=> left.Center.ApproximatelyEquals(right.Center, epsilon) && left.Radius.ApproximatelyEquals(right.Radius, epsilon);
|
=> left.Center.ApproximatelyEquals(right.Center, epsilon) && left.Radius.ApproximatelyEquals(right.Radius, epsilon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Circle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Circle"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Circle"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Circle circle && Center.Equals(circle.Center) && Radius.Equals(circle.Radius);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Circle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Circle"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(Center, Radius);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Circle"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Circle"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Circle)}({Center}, {Radius})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -127,12 +127,6 @@ public readonly struct ColorHSV(float hue, float saturation, float value)
|
|||||||
/// <returns>The interpolated <see cref="ColorHSV"/>.</returns>
|
/// <returns>The interpolated <see cref="ColorHSV"/>.</returns>
|
||||||
public static ColorHSV Lerp(ColorHSV from, ColorHSV to, float t) => from + FromTo(from, to) * t;
|
public static ColorHSV Lerp(ColorHSV from, ColorHSV to, float t) => from + FromTo(from, to) * t;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="ColorHSV"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="ColorHSV"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(ColorHSV)}({Hue}, {Saturation}, {Value})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if two <see cref="ColorHSV"/>s are approximately equal within a specified epsilon range.
|
/// Checks if two <see cref="ColorHSV"/>s are approximately equal within a specified epsilon range.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -148,13 +142,19 @@ public readonly struct ColorHSV(float hue, float saturation, float value)
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="ColorHSV"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="ColorHSV"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorHSV"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorHSV"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is ColorHSV objVec && Hue.Equals(objVec.Hue) && Saturation.Equals(objVec.Saturation) && Value.Equals(objVec.Value);
|
public override bool Equals(object? obj) => obj is ColorHSV colorHSV && Hue.Equals(colorHSV.Hue) && Saturation.Equals(colorHSV.Saturation) && Value.Equals(colorHSV.Value);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="ColorHSV"/>.
|
/// Generates a hash code for the <see cref="ColorHSV"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="ColorHSV"/>.</returns>
|
/// <returns>A hash code for the <see cref="ColorHSV"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(Hue, Saturation, Value);
|
public override int GetHashCode() => System.HashCode.Combine(Hue, Saturation, Value);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="ColorHSV"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="ColorHSV"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(ColorHSV)}({Hue}, {Saturation}, {Value})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -119,24 +119,24 @@ public readonly struct ColorRGB(byte r, byte g, byte b)
|
|||||||
/// <returns>The interpolated <see cref="ColorRGB"/>.</returns>
|
/// <returns>The interpolated <see cref="ColorRGB"/>.</returns>
|
||||||
public static ColorRGB Lerp(ColorRGB from, ColorRGB to, float t) => from + FromTo(from, to) * t;
|
public static ColorRGB Lerp(ColorRGB from, ColorRGB to, float t) => from + FromTo(from, to) * t;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="ColorRGB"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="ColorRGB"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(ColorRGB)}({R}, {G}, {B})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the specified object is equal to the current <see cref="ColorRGB"/>.
|
/// Determines whether the specified object is equal to the current <see cref="ColorRGB"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="ColorRGB"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="ColorRGB"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorRGB"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorRGB"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is ColorRGB objVec && R.Equals(objVec.R) && G.Equals(objVec.G) && B.Equals(objVec.B);
|
public override bool Equals(object? obj) => obj is ColorRGB colorRGB && R.Equals(colorRGB.R) && G.Equals(colorRGB.G) && B.Equals(colorRGB.B);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="ColorRGB"/>.
|
/// Generates a hash code for the <see cref="ColorRGB"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="ColorRGB"/>.</returns>
|
/// <returns>A hash code for the <see cref="ColorRGB"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(R, G, B);
|
public override int GetHashCode() => System.HashCode.Combine(R, G, B);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="ColorRGB"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="ColorRGB"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(ColorRGB)}({R}, {G}, {B})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -102,24 +102,24 @@ public readonly struct ColorRGBA(byte r, byte g, byte b, byte a = 255)
|
|||||||
/// <returns>The interpolated <see cref="ColorRGBA"/>.</returns>
|
/// <returns>The interpolated <see cref="ColorRGBA"/>.</returns>
|
||||||
public static ColorRGBA Lerp(ColorRGBA from, ColorRGBA to, float t) => from + FromTo(from, to) * t;
|
public static ColorRGBA Lerp(ColorRGBA from, ColorRGBA to, float t) => from + FromTo(from, to) * t;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="ColorRGBA"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="ColorRGBA"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(ColorRGBA)}({R}, {G}, {B}, {A})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the specified object is equal to the current <see cref="ColorRGBA"/>.
|
/// Determines whether the specified object is equal to the current <see cref="ColorRGBA"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="ColorRGBA"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="ColorRGBA"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorRGBA"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="ColorRGBA"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is ColorRGBA objVec && R.Equals(objVec.R) && G.Equals(objVec.G) && B.Equals(objVec.B) && A.Equals(objVec.A);
|
public override bool Equals(object? obj) => obj is ColorRGBA colorRGBA && R.Equals(colorRGBA.R) && G.Equals(colorRGBA.G) && B.Equals(colorRGBA.B) && A.Equals(colorRGBA.A);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="ColorRGBA"/>.
|
/// Generates a hash code for the <see cref="ColorRGBA"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="ColorRGBA"/>.</returns>
|
/// <returns>A hash code for the <see cref="ColorRGBA"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(R, G, B, A);
|
public override int GetHashCode() => System.HashCode.Combine(R, G, B, A);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="ColorRGBA"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="ColorRGBA"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(ColorRGBA)}({R}, {G}, {B}, {A})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -186,6 +186,25 @@ public readonly struct Line2D(Vector2D from, Vector2D to)
|
|||||||
/// <returns><see cref="true"/> if the <see cref="Line2D"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the <see cref="Line2D"/>s are approximately equal; otherwise, <see cref="false"/>.</returns>
|
||||||
public static bool ApproximatelyEquals(Line2D left, Line2D right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Line2D left, Line2D right, float epsilon = float.Epsilon)
|
||||||
=> left.From.ApproximatelyEquals(right.From, epsilon) && left.To.ApproximatelyEquals(right.To, epsilon);
|
=> left.From.ApproximatelyEquals(right.From, epsilon) && left.To.ApproximatelyEquals(right.To, epsilon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Line2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Line2D"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Line2D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Line2D line2D && From.Equals(line2D.From) && To.Equals(line2D.To);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Line2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Line2D"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(From, To);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Line2D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Line2D"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Line2D)}({From}, {To})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -38,6 +38,25 @@ public readonly struct Line2DEquation(float slope, float offsetY)
|
|||||||
/// <returns>True if the line equations are approximately equal; otherwise, false.</returns>
|
/// <returns>True if the line equations are approximately equal; otherwise, false.</returns>
|
||||||
public static bool ApproximatelyEquals(Line2DEquation left, Line2DEquation right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Line2DEquation left, Line2DEquation right, float epsilon = float.Epsilon)
|
||||||
=> left.Slope.ApproximatelyEquals(right.Slope, epsilon) && left.OffsetY.ApproximatelyEquals(right.OffsetY, epsilon);
|
=> left.Slope.ApproximatelyEquals(right.Slope, epsilon) && left.OffsetY.ApproximatelyEquals(right.OffsetY, epsilon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Line2DEquation"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Line2DEquation"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Line2DEquation"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Line2DEquation lineEquation && Slope.Equals(lineEquation.Slope) && OffsetY.Equals(lineEquation.OffsetY);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Line2DEquation"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Line2DEquation"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(Slope, OffsetY);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Line2DEquation"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Line2DEquation"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Line2DEquation)}({Slope}, {OffsetY})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -70,6 +70,25 @@ public readonly struct Projection1D(float min, float max)
|
|||||||
depth = 0f;
|
depth = 0f;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Projection1D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Projection1D"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Projection1D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Projection1D projection1D && Min.Equals(projection1D.Min) && Max.Equals(projection1D.Max);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Projection1D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Projection1D"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(Min, Max);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Projection1D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Projection1D"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Projection1D)}({Min}, {Max})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -282,24 +282,24 @@ public readonly struct Quaternion(float x, float y, float z, float w)
|
|||||||
public static bool ApproximatelyEquals(Quaternion left, Quaternion right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Quaternion left, Quaternion right, float epsilon = float.Epsilon)
|
||||||
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon) && left.Z.ApproximatelyEquals(right.Z, epsilon) && left.W.ApproximatelyEquals(right.W, epsilon);
|
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon) && left.Z.ApproximatelyEquals(right.Z, epsilon) && left.W.ApproximatelyEquals(right.W, epsilon);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="Quaternion"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="Quaternion"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(Quaternion)}({W}, {X}, {Y}, {Z})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the specified object is equal to the current <see cref="Quaternion"/>.
|
/// Determines whether the specified object is equal to the current <see cref="Quaternion"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="Quaternion"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="Quaternion"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Quaternion"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Quaternion"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is Quaternion objVec && X.Equals(objVec.X) && Y.Equals(objVec.Y) && Z.Equals(objVec.Z) && W.Equals(objVec.W);
|
public override bool Equals(object? obj) => obj is Quaternion quaternion && X.Equals(quaternion.X) && Y.Equals(quaternion.Y) && Z.Equals(quaternion.Z) && W.Equals(quaternion.W);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="Quaternion"/>.
|
/// Generates a hash code for the <see cref="Quaternion"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="Quaternion"/>.</returns>
|
/// <returns>A hash code for the <see cref="Quaternion"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(X, Y, Z);
|
public override int GetHashCode() => System.HashCode.Combine(W, X, Y, Z);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Quaternion"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Quaternion"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Quaternion)}({W}, {X}, {Y}, {Z})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
namespace Syntriax.Engine.Core;
|
namespace Syntriax.Engine.Core;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents an infinite ray in 2D space.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Origin">The <see cref="Vector2D"/> in 2D space where the ray starts from.</param>
|
||||||
|
/// <param name="Direction">Normalized <see cref="Vector2D"/> indicating the ray's is direction.</param>
|
||||||
public readonly struct Ray2D(Vector2D Origin, Vector2D Direction)
|
public readonly struct Ray2D(Vector2D Origin, Vector2D Direction)
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -48,6 +53,25 @@ public readonly struct Ray2D(Vector2D Origin, Vector2D Direction)
|
|||||||
|
|
||||||
return ray.Origin + ray.Direction * dot;
|
return ray.Origin + ray.Direction * dot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Ray2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Ray2D"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Ray2D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Ray2D ray2D && Origin.Equals(ray2D.Origin) && Direction.Equals(ray2D.Direction);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Ray2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Ray2D"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(Origin, Direction);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Ray2D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Ray2D"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Ray2D)}({Origin}, {Direction})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -122,7 +122,7 @@ public class Shape2D(List<Vector2D> vertices) : IEnumerable<Vector2D>
|
|||||||
triangles.Clear();
|
triangles.Clear();
|
||||||
|
|
||||||
for (int i = 2; i < shape.Vertices.Count; i++)
|
for (int i = 2; i < shape.Vertices.Count; i++)
|
||||||
triangles.Add(new Triangle(shape[0], shape[i - 1], shape[i]));
|
triangles.Add(new Triangle(shape[0], shape[i], shape[i - 1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -251,6 +251,34 @@ public class Shape2D(List<Vector2D> vertices) : IEnumerable<Vector2D>
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Shape2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Shape2D"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Shape2D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Shape2D shape2D && _vertices.Equals(shape2D._vertices);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Shape2D"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Shape2D"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(Vertices);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Shape2D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Shape2D"/>.</returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
System.Text.StringBuilder stringBuilder = new(Vertices[0].ToString());
|
||||||
|
for (int i = 1; i < Vertices.Count; i++)
|
||||||
|
{
|
||||||
|
stringBuilder.Append(", ");
|
||||||
|
stringBuilder.Append(Vertices[i].ToString());
|
||||||
|
}
|
||||||
|
return $"{nameof(Shape2D)}({stringBuilder})";
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerator<Vector2D> GetEnumerator() => Vertices.GetEnumerator();
|
public IEnumerator<Vector2D> GetEnumerator() => Vertices.GetEnumerator();
|
||||||
|
|
||||||
@@ -270,7 +298,7 @@ public static class Shape2DExtensions
|
|||||||
public static Triangle ToSuperTriangle(this Shape2D shape) => Shape2D.GetSuperTriangle(shape);
|
public static Triangle ToSuperTriangle(this Shape2D shape) => Shape2D.GetSuperTriangle(shape);
|
||||||
|
|
||||||
/// <inheritdoc cref="Shape2D.TriangulateConvex(Shape2D, IList{Triangle})" />
|
/// <inheritdoc cref="Shape2D.TriangulateConvex(Shape2D, IList{Triangle})" />
|
||||||
public static void ToTrianglesConvex(this Shape2D shape, IList<Triangle> lines) => Shape2D.TriangulateConvex(shape, lines);
|
public static void ToTrianglesConvex(this Shape2D shape, IList<Triangle> triangles) => Shape2D.TriangulateConvex(shape, triangles);
|
||||||
|
|
||||||
/// <inheritdoc cref="Shape2D.TriangulateConvex(Shape2D)" />
|
/// <inheritdoc cref="Shape2D.TriangulateConvex(Shape2D)" />
|
||||||
public static List<Triangle> ToTrianglesConvex(this Shape2D shape) => Shape2D.TriangulateConvex(shape);
|
public static List<Triangle> ToTrianglesConvex(this Shape2D shape) => Shape2D.TriangulateConvex(shape);
|
||||||
|
@@ -44,6 +44,25 @@ public readonly struct Triangle(Vector2D A, Vector2D B, Vector2D C)
|
|||||||
/// <returns><c>true</c> if the <see cref="Triangle"/>s are approximately equal; otherwise, <c>false</c>.</returns>
|
/// <returns><c>true</c> if the <see cref="Triangle"/>s are approximately equal; otherwise, <c>false</c>.</returns>
|
||||||
public static bool ApproximatelyEquals(Triangle left, Triangle right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Triangle left, Triangle right, float epsilon = float.Epsilon)
|
||||||
=> left.A.ApproximatelyEquals(right.A, epsilon) && left.B.ApproximatelyEquals(right.B, epsilon) && left.C.ApproximatelyEquals(right.C, epsilon);
|
=> left.A.ApproximatelyEquals(right.A, epsilon) && left.B.ApproximatelyEquals(right.B, epsilon) && left.C.ApproximatelyEquals(right.C, epsilon);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified object is equal to the current <see cref="Triangle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj">The object to compare with the current <see cref="Triangle"/>.</param>
|
||||||
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Triangle"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
|
public override bool Equals(object? obj) => obj is Triangle triangle && A.Equals(triangle.A) && B.Equals(triangle.B) && C.Equals(triangle.C);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generates a hash code for the <see cref="Triangle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A hash code for the <see cref="Triangle"/>.</returns>
|
||||||
|
public override int GetHashCode() => System.HashCode.Combine(A, B, C);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Triangle"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Triangle"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Triangle)}({A}, {B}, {C})";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TriangleExtensions
|
public static class TriangleExtensions
|
||||||
|
@@ -302,24 +302,24 @@ public readonly struct Vector2D(float x, float y)
|
|||||||
public static bool ApproximatelyEquals(Vector2D left, Vector2D right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Vector2D left, Vector2D right, float epsilon = float.Epsilon)
|
||||||
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon);
|
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="Vector2D"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="Vector2D"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(Vector2D)}({X}, {Y})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the specified object is equal to the current <see cref="Vector2D"/>.
|
/// Determines whether the specified object is equal to the current <see cref="Vector2D"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="Vector2D"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="Vector2D"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Vector2D"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Vector2D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is Vector2D objVec && X.Equals(objVec.X) && Y.Equals(objVec.Y);
|
public override bool Equals(object? obj) => obj is Vector2D vector2D && X.Equals(vector2D.X) && Y.Equals(vector2D.Y);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="Vector2D"/>.
|
/// Generates a hash code for the <see cref="Vector2D"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="Vector2D"/>.</returns>
|
/// <returns>A hash code for the <see cref="Vector2D"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(X, Y);
|
public override int GetHashCode() => System.HashCode.Combine(X, Y);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Vector2D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Vector2D"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Vector2D)}({X}, {Y})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -271,24 +271,24 @@ public readonly struct Vector3D(float x, float y, float z)
|
|||||||
public static bool ApproximatelyEquals(Vector3D left, Vector3D right, float epsilon = float.Epsilon)
|
public static bool ApproximatelyEquals(Vector3D left, Vector3D right, float epsilon = float.Epsilon)
|
||||||
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon) && left.Z.ApproximatelyEquals(right.Z, epsilon);
|
=> left.X.ApproximatelyEquals(right.X, epsilon) && left.Y.ApproximatelyEquals(right.Y, epsilon) && left.Z.ApproximatelyEquals(right.Z, epsilon);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts the <see cref="Vector3D"/> to its string representation.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A string representation of the <see cref="Vector3D"/>.</returns>
|
|
||||||
public override string ToString() => $"{nameof(Vector3D)}({X}, {Y}, {Z})";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether the specified object is equal to the current <see cref="Vector3D"/>.
|
/// Determines whether the specified object is equal to the current <see cref="Vector3D"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="obj">The object to compare with the current <see cref="Vector3D"/>.</param>
|
/// <param name="obj">The object to compare with the current <see cref="Vector3D"/>.</param>
|
||||||
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Vector3D"/>; otherwise, <see cref="false"/>.</returns>
|
/// <returns><see cref="true"/> if the specified object is equal to the current <see cref="Vector3D"/>; otherwise, <see cref="false"/>.</returns>
|
||||||
public override bool Equals(object? obj) => obj is Vector3D objVec && X.Equals(objVec.X) && Y.Equals(objVec.Y) && Z.Equals(objVec.Z);
|
public override bool Equals(object? obj) => obj is Vector3D vector3D && X.Equals(vector3D.X) && Y.Equals(vector3D.Y) && Z.Equals(vector3D.Z);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a hash code for the <see cref="Vector3D"/>.
|
/// Generates a hash code for the <see cref="Vector3D"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>A hash code for the <see cref="Vector3D"/>.</returns>
|
/// <returns>A hash code for the <see cref="Vector3D"/>.</returns>
|
||||||
public override int GetHashCode() => System.HashCode.Combine(X, Y, Z);
|
public override int GetHashCode() => System.HashCode.Combine(X, Y, Z);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts the <see cref="Vector3D"/> to its string representation.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A string representation of the <see cref="Vector3D"/>.</returns>
|
||||||
|
public override string ToString() => $"{nameof(Vector3D)}({X}, {Y}, {Z})";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@@ -18,7 +18,10 @@ public static class EngineConverterExtensions
|
|||||||
public static Vector2D ToVector2D(this Vector2 vector) => new(vector.X, vector.Y);
|
public static Vector2D ToVector2D(this Vector2 vector) => new(vector.X, vector.Y);
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static Color ToColor(this ColorRGBA rgba) => new(rgba.R, rgba.G, rgba.B, rgba.A);
|
public static Color ToColor(this ColorRGBA color) => new(color.R, color.G, color.B, color.A);
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static ColorRGBA ToColorRGBA(this Color color) => new(color.R, color.G, color.B, color.A);
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static Vector2D ToVector2D(this Point point) => new(point.X, point.Y);
|
public static Vector2D ToVector2D(this Point point) => new(point.X, point.Y);
|
||||||
|
@@ -15,7 +15,7 @@ public class Collider2DShapeBehaviour : Collider2DBehaviourBase, IShapeCollider2
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Shape2D _shapeWorld = Shape2D.Square.CreateCopy();
|
private Shape2D _shapeWorld = Shape2D.Square;
|
||||||
private Shape2D _shapeLocal = Shape2D.Square;
|
private Shape2D _shapeLocal = Shape2D.Square;
|
||||||
|
|
||||||
public override void CalculateCollider() => ShapeLocal.Transform(Transform, _shapeWorld);
|
public override void CalculateCollider() => ShapeLocal.Transform(Transform, _shapeWorld);
|
||||||
|
@@ -25,11 +25,11 @@ public class PhysicsEngine2D : Behaviour, IPreUpdate, IPhysicsEngine2D
|
|||||||
protected BehaviourCollector<IRigidBody2D> rigidBodyCollector = new();
|
protected BehaviourCollector<IRigidBody2D> rigidBodyCollector = new();
|
||||||
protected BehaviourCollector<ICollider2D> colliderCollector = new();
|
protected BehaviourCollector<ICollider2D> colliderCollector = new();
|
||||||
|
|
||||||
private readonly ListPool<ICollider2D> colliderPool = new(() => new(32));
|
private readonly ListPool<ICollider2D> colliderPool = new();
|
||||||
private readonly ListPool<IPrePhysicsUpdate> prePhysicsUpdatePool = new(() => new(32));
|
private readonly ListPool<IPrePhysicsUpdate> prePhysicsUpdatePool = new();
|
||||||
private readonly ListPool<IPhysicsUpdate> physicsUpdatePool = new(() => new(32));
|
private readonly ListPool<IPhysicsUpdate> physicsUpdatePool = new();
|
||||||
private readonly ListPool<IPhysicsIteration> physicsIterationPool = new(() => new(32));
|
private readonly ListPool<IPhysicsIteration> physicsIterationPool = new();
|
||||||
private readonly ListPool<IPostPhysicsUpdate> postPhysicsUpdatePool = new(() => new(32));
|
private readonly ListPool<IPostPhysicsUpdate> postPhysicsUpdatePool = new();
|
||||||
|
|
||||||
public int IterationPerStep { get => _iterationPerStep; set => _iterationPerStep = value < 1 ? 1 : value; }
|
public int IterationPerStep { get => _iterationPerStep; set => _iterationPerStep = value < 1 ? 1 : value; }
|
||||||
public float IterationPeriod { get => _iterationPeriod; set => _iterationPeriod = value.Max(0.0001f); }
|
public float IterationPeriod { get => _iterationPeriod; set => _iterationPeriod = value.Max(0.0001f); }
|
||||||
|
@@ -21,6 +21,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
|
|||||||
private readonly ICollisionResolver2D collisionResolver = null!;
|
private readonly ICollisionResolver2D collisionResolver = null!;
|
||||||
private readonly IRaycastResolver2D raycastResolver = null!;
|
private readonly IRaycastResolver2D raycastResolver = null!;
|
||||||
|
|
||||||
|
private readonly ListPool<ICollider2D> colliderPool = new();
|
||||||
|
private readonly ListPool<IPrePhysicsUpdate> prePhysicsUpdatePool = new();
|
||||||
|
private readonly ListPool<IPhysicsUpdate> physicsUpdatePool = new();
|
||||||
|
private readonly ListPool<IPhysicsIteration> physicsIterationPool = new();
|
||||||
|
private readonly ListPool<IPostPhysicsUpdate> postPhysicsUpdatePool = new();
|
||||||
|
|
||||||
public int IterationPerStep { get => _iterationCount; set => _iterationCount = value < 1 ? 1 : value; }
|
public int IterationPerStep { get => _iterationCount; set => _iterationCount = value < 1 ? 1 : value; }
|
||||||
|
|
||||||
public void AddRigidBody(IRigidBody2D rigidBody)
|
public void AddRigidBody(IRigidBody2D rigidBody)
|
||||||
@@ -112,11 +118,11 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
|
|||||||
{
|
{
|
||||||
float intervalDeltaTime = deltaTime / IterationPerStep;
|
float intervalDeltaTime = deltaTime / IterationPerStep;
|
||||||
|
|
||||||
List<ICollider2D> childColliders = [];
|
List<ICollider2D> childColliders = colliderPool.Get();
|
||||||
List<IPrePhysicsUpdate> physicsPreUpdates = [];
|
List<IPrePhysicsUpdate> physicsPreUpdates = prePhysicsUpdatePool.Get();
|
||||||
List<IPhysicsUpdate> physicsUpdates = [];
|
List<IPhysicsUpdate> physicsUpdates = physicsUpdatePool.Get();
|
||||||
List<IPhysicsIteration> physicsIterations = [];
|
List<IPhysicsIteration> physicsIterations = physicsIterationPool.Get();
|
||||||
List<IPostPhysicsUpdate> physicsPostUpdates = [];
|
List<IPostPhysicsUpdate> physicsPostUpdates = postPhysicsUpdatePool.Get();
|
||||||
|
|
||||||
rigidBody.BehaviourController.GetBehavioursInChildren(childColliders);
|
rigidBody.BehaviourController.GetBehavioursInChildren(childColliders);
|
||||||
rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates);
|
rigidBody.BehaviourController.GetBehavioursInChildren(physicsPreUpdates);
|
||||||
@@ -160,6 +166,12 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
|
|||||||
|
|
||||||
for (int i = physicsPostUpdates.Count - 1; i >= 0; i--)
|
for (int i = physicsPostUpdates.Count - 1; i >= 0; i--)
|
||||||
physicsPostUpdates[i].PostPhysicsUpdate(deltaTime);
|
physicsPostUpdates[i].PostPhysicsUpdate(deltaTime);
|
||||||
|
|
||||||
|
colliderPool.Return(childColliders);
|
||||||
|
prePhysicsUpdatePool.Return(physicsPreUpdates);
|
||||||
|
physicsUpdatePool.Return(physicsUpdates);
|
||||||
|
physicsIterationPool.Return(physicsIterations);
|
||||||
|
postPhysicsUpdatePool.Return(physicsPostUpdates);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ResolveColliders(ICollider2D colliderX, ICollider2D colliderY)
|
private void ResolveColliders(ICollider2D colliderX, ICollider2D colliderY)
|
||||||
|
@@ -6,7 +6,7 @@ namespace Syntriax.Engine.Physics2D;
|
|||||||
|
|
||||||
public class RaycastResolver2D : IRaycastResolver2D
|
public class RaycastResolver2D : IRaycastResolver2D
|
||||||
{
|
{
|
||||||
private readonly ListPool<Line2D> lineCacheQueue = new(() => new(4));
|
private readonly ListPool<Line2D> lineCacheQueue = new(initialListCapacity: 4);
|
||||||
|
|
||||||
RaycastResult? IRaycastResolver2D.RaycastAgainst<T>(T shape, Ray2D ray, float length)
|
RaycastResult? IRaycastResolver2D.RaycastAgainst<T>(T shape, Ray2D ray, float length)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user