6 Commits

274 changed files with 1111 additions and 2058 deletions

4
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "Engine.Integration/YamlDotNet"] [submodule "Engine.Serializers/YamlDotNet"]
path = Engine.Integration/YamlDotNet path = Engine.Serializers/YamlDotNet
url = git@github.com:Syntriax/YamlDotNet.git url = git@github.com:Syntriax/YamlDotNet.git

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the class implementing it has Assignable fields that are necessary for the engine to work properly. /// Indicates the class implementing it has Assignable fields that are necessary for the engine to work properly.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IBehaviourController"/> field. /// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IBehaviourController"/> field.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IEntity"/> field. /// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IEntity"/> field.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IStateEnable"/> field. /// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IStateEnable"/> field.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverse"/> field. /// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverse"/> field.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverseObject"/> field. /// Indicates the object is an <see cref="IAssignable"/> with an assignable <see cref="IUniverseObject"/> field.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an entity which can be active or not. /// Represents an entity which can be active or not.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a behaviour that any object in the engine that might use to interact with itself or other objects. /// Represents a behaviour that any object in the engine that might use to interact with itself or other objects.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public interface IBehaviour2D : IBehaviour public interface IBehaviour2D : IBehaviour
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a collector for the class type of <typeparamref name="T"/>. /// Represents a collector for the class type of <typeparamref name="T"/>.

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a controller for managing <see cref="IBehaviour"/>s. Connected to an <see cref="IUniverseObject"/>. /// Represents a controller for managing <see cref="IBehaviour"/>s. Connected to an <see cref="IUniverseObject"/>.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a 2D camera in the engine. /// Represents a 2D camera in the engine.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public interface ICoroutineYield public interface ICoroutineYield
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a basic entity in the engine. /// Represents a basic entity in the engine.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an entity that can be initialized and finalized. This information is useful for objects we know that are not in use and can be either recycled or dropped for garbage collection. /// Represents an entity that can be initialized and finalized. This information is useful for objects we know that are not in use and can be either recycled or dropped for garbage collection.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an entity with a name. /// Represents an entity with a name.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an entity with an enable state that can be toggled. /// Represents an entity with an enable state that can be toggled.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents the transformation properties of an object such as position, scale, and rotation in 2D space. /// Represents the transformation properties of an object such as position, scale, and rotation in 2D space.

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a universe responsible for managing <see cref="IUniverseObject"/>s. /// Represents a universe responsible for managing <see cref="IUniverseObject"/>s.

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an <see cref="IEntity"/> that can enter and exit a universe within the <see cref="IUniverse"/> system. /// Represents an <see cref="IEntity"/> that can enter and exit a universe within the <see cref="IUniverse"/> system.

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class ActiveBehaviourCollector<T> : IBehaviourCollector<T> where T : class, IBehaviour public class ActiveBehaviourCollector<T> : IBehaviourCollector<T> where T : class, IBehaviour
{ {
@@ -16,8 +16,8 @@ public class ActiveBehaviourCollector<T> : IBehaviourCollector<T> where T : clas
private readonly Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments>.EventHandler delegateOnUniverseObjectRegistered = null!; private readonly Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments>.EventHandler delegateOnUniverseObjectRegistered = null!;
private readonly Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments>.EventHandler delegateOnUniverseObjectUnregistered = null!; private readonly Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments>.EventHandler delegateOnUniverseObjectUnregistered = null!;
private readonly FastList<T> monitoringBehaviours = new(32); private readonly List<T> monitoringBehaviours = new(32);
protected readonly FastList<T> activeBehaviours = new(32); protected readonly List<T> activeBehaviours = new(32);
protected readonly Dictionary<IActive, T> monitoringActiveToBehaviour = new(32); protected readonly Dictionary<IActive, T> monitoringActiveToBehaviour = new(32);
public IUniverse Universe { get; private set; } = null!; public IUniverse Universe { get; private set; } = null!;

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class ActiveBehaviourCollectorSorted<T> : ActiveBehaviourCollector<T> where T : class, IBehaviour public class ActiveBehaviourCollectorSorted<T> : ActiveBehaviourCollector<T> where T : class, IBehaviour
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public abstract class BaseEntity : IEntity public abstract class BaseEntity : IEntity
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public abstract class Behaviour : BehaviourBase public abstract class Behaviour : BehaviourBase
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public abstract class Behaviour2D : Behaviour, IBehaviour2D public abstract class Behaviour2D : Behaviour, IBehaviour2D
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
[System.Diagnostics.DebuggerDisplay("{GetType().Name, nq}, Priority: {Priority}, Initialized: {Initialized}")] [System.Diagnostics.DebuggerDisplay("{GetType().Name, nq}, Priority: {Priority}, Initialized: {Initialized}")]
public abstract class BehaviourBase : BaseEntity, IBehaviour public abstract class BehaviourBase : BaseEntity, IBehaviour

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class BehaviourCollector<T> : IBehaviourCollector<T> where T : class public class BehaviourCollector<T> : IBehaviourCollector<T> where T : class
{ {
@@ -14,7 +15,7 @@ public class BehaviourCollector<T> : IBehaviourCollector<T> where T : class
private readonly Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments>.EventHandler delegateOnUniverseObjectRegistered = null!; private readonly Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments>.EventHandler delegateOnUniverseObjectRegistered = null!;
private readonly Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments>.EventHandler delegateOnUniverseObjectUnregistered = null!; private readonly Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments>.EventHandler delegateOnUniverseObjectUnregistered = null!;
protected readonly FastList<T> behaviours = new(32); protected readonly List<T> behaviours = new(32);
public IUniverse Universe { get; private set; } = null!; public IUniverse Universe { get; private set; } = null!;

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class BehaviourCollectorSorted<T> : BehaviourCollector<T> where T : class public class BehaviourCollectorSorted<T> : BehaviourCollector<T> where T : class
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
[System.Diagnostics.DebuggerDisplay("Behaviour Count: {behaviours.Count}")] [System.Diagnostics.DebuggerDisplay("Behaviour Count: {behaviours.Count}")]
public class BehaviourController : BaseEntity, IBehaviourController public class BehaviourController : BaseEntity, IBehaviourController
@@ -10,7 +10,7 @@ public class BehaviourController : BaseEntity, IBehaviourController
public Event<IBehaviourController, IBehaviourController.BehaviourRemovedArguments> OnBehaviourRemoved { get; } = new(); public Event<IBehaviourController, IBehaviourController.BehaviourRemovedArguments> OnBehaviourRemoved { get; } = new();
public Event<IHasUniverseObject> OnUniverseObjectAssigned { get; } = new(); public Event<IHasUniverseObject> OnUniverseObjectAssigned { get; } = new();
private readonly FastList<IBehaviour> behaviours = new(Constants.BEHAVIOURS_SIZE_INITIAL); private readonly List<IBehaviour> behaviours = new(Constants.BEHAVIOURS_SIZE_INITIAL);
private IUniverseObject _universeObject = null!; private IUniverseObject _universeObject = null!;

View File

@@ -1,7 +1,7 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class CoroutineManager : Behaviour, IUpdate public class CoroutineManager : Behaviour, IUpdate
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class CoroutineYield(Func<bool> condition) : ICoroutineYield public class CoroutineYield(Func<bool> condition) : ICoroutineYield
{ {

View File

@@ -1,6 +1,6 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public static class Assert public static class Assert
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public class ConsoleLogger : LoggerBase public class ConsoleLogger : LoggerBase
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.IO; using System.IO;
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public class FileLogger : LoggerBase public class FileLogger : LoggerBase
{ {
@@ -14,9 +14,6 @@ public class FileLogger : LoggerBase
public FileLogger(string filePath) public FileLogger(string filePath)
{ {
if (!filePath.EndsWith(".log"))
filePath += ".log";
FilePath = filePath; FilePath = filePath;
bool isRelativePath = Path.GetFullPath(filePath).CompareTo(filePath) != 0; bool isRelativePath = Path.GetFullPath(filePath).CompareTo(filePath) != 0;

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public interface ILogger public interface ILogger
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public abstract class LoggerBase : ILogger public abstract class LoggerBase : ILogger
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public class LoggerContainer : Behaviour, ILogger public class LoggerContainer : Behaviour, ILogger
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public static class LoggerExtensions public static class LoggerExtensions
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public class LoggerWrapper(ILogger firstLogger, ILogger secondLogger) : ILogger public class LoggerWrapper(ILogger firstLogger, ILogger secondLogger) : ILogger
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Debug; namespace Syntriax.Engine.Core.Debug;
public static class LoggerWrapperExtensions public static class LoggerWrapperExtensions
{ {

View File

@@ -1,71 +0,0 @@
using System;
using System.IO;
using System.Linq;
namespace Engine.Core.Debug;
public class RotatingFileLogger : ILogger
{
public readonly FileLogger FileLogger = null!;
public readonly string Directory = string.Empty;
public readonly int RotateLength = 3;
public RotatingFileLogger(string directory, string namePrefix, string nameSuffix = "", int rotateLength = 3)
{
RotateLength = rotateLength;
string fileName = Path.Combine(directory, namePrefix);
if (!string.IsNullOrWhiteSpace(nameSuffix))
fileName += $"_{nameSuffix}";
bool isRelativePath = Path.GetFullPath(fileName).CompareTo(fileName) != 0;
if (isRelativePath)
fileName = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName));
if (File.Exists($"{fileName}.log"))
RenameExistingLogs(fileName, RotateLength);
FileLogger = new(fileName);
Directory = Path.GetDirectoryName(fileName) ?? throw new("Unexpected error on getting directory of logger path");
RotateLastLogs(Directory, namePrefix, RotateLength);
}
private static void RenameExistingLogs(string filePath, int rotateLength)
{
for (int i = rotateLength - 1; i >= 0; i--)
{
string source = i == 0
? $"{filePath}.log"
: $"{filePath}_{i}.log";
string dest = $"{filePath}_{i + 1}.log";
if (!File.Exists(source))
continue;
if (File.Exists(dest))
File.Delete(dest);
File.Move(source, dest);
}
}
private static void RotateLastLogs(string directory, string prefix, int rotateLength)
{
IOrderedEnumerable<string> logs = System.IO.Directory.GetFiles(directory, $"{prefix}*.log")
.OrderBy(File.GetCreationTime);
foreach (string file in logs.Skip(rotateLength))
try
{
ILogger.Shared.Log($"Removing log file located at \"{file}\" during rotation.");
File.Delete(file);
}
catch (Exception e) { ILogger.Shared.LogException($"Failed to rotate log file at \"{file}\"", e); }
}
public ILogger.Level FilterLevel { get => FileLogger.FilterLevel; set => FileLogger.FilterLevel = value; }
public void Log(string message, ILogger.Level level = ILogger.Level.Info, bool force = false) => FileLogger.Log(message, level, force);
}

View File

@@ -4,8 +4,7 @@
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>false</ImplicitUsings> <ImplicitUsings>false</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<RootNamespace>Engine.Core</RootNamespace> <RootNamespace>Syntriax.Engine.Core</RootNamespace>
<AssemblyName>Engine.Core</AssemblyName>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Exceptions;
public class AssignFailedException(string? message) : Exception(message) public class AssignFailedException(string? message) : Exception(message)
{ {

View File

@@ -1,3 +1,3 @@
namespace Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Exceptions;
public class BehaviourNotFoundException(string? message) : NotFoundException(message); public class BehaviourNotFoundException(string? message) : NotFoundException(message);

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Exceptions;
public class NotAssignedException(string? message) : Exception(message) public class NotAssignedException(string? message) : Exception(message)
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Exceptions;
public class NotFoundException(string? message) : Exception(message) public class NotFoundException(string? message) : Exception(message)
{ {

View File

@@ -1,3 +1,3 @@
namespace Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Exceptions;
public class UniverseObjectNotFoundException(string? message) : NotFoundException(message); public class UniverseObjectNotFoundException(string? message) : NotFoundException(message);

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class BehaviourControllerExtensions public static class BehaviourControllerExtensions
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class EnumExtensions public static class EnumExtensions
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class FloatExtensions public static class FloatExtensions
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class TransformExtensions public static class TransformExtensions
{ {

View File

@@ -1,6 +1,6 @@
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class UniverseExtensions public static class UniverseExtensions
{ {

View File

@@ -1,9 +1,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class UniverseObjectExtensions public static class UniverseObjectExtensions
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Factory.Abstract; namespace Syntriax.Engine.Core.Factory.Abstract;
public interface IFactory<TInterface> where TInterface : class public interface IFactory<TInterface> where TInterface : class
{ {

View File

@@ -1,6 +1,6 @@
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public class BehaviourControllerFactory public class BehaviourControllerFactory
{ {

View File

@@ -1,6 +1,6 @@
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public class BehaviourFactory public class BehaviourFactory
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using Engine.Core.Factory.Abstract; using Syntriax.Engine.Core.Factory.Abstract;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public abstract class FactoryBase<TInterface> : IFactory<TInterface> public abstract class FactoryBase<TInterface> : IFactory<TInterface>
where TInterface : class where TInterface : class

View File

@@ -1,6 +1,6 @@
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public class StateEnableFactory public class StateEnableFactory
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public class TransformFactory public class TransformFactory
{ {

View File

@@ -3,7 +3,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public static class TypeFactory public static class TypeFactory
{ {

View File

@@ -1,6 +1,6 @@
using Engine.Core.Exceptions; using Syntriax.Engine.Core.Exceptions;
namespace Engine.Core.Factory; namespace Syntriax.Engine.Core.Factory;
public class UniverseObjectFactory public class UniverseObjectFactory
{ {

View File

@@ -1,15 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Engine.Core.Debug; using Syntriax.Engine.Core.Debug;
namespace Engine.Core; namespace Syntriax.Engine.Core;
// TODO!: every reverse loop has a chance to have more than 1 unsubscription,
// for (int i = listeners.Count - 1; i >= 0; i--)
// can be replaced with
// for (int i = listeners.Count - 1; i >= 0; i = Math.Min(i - 1, listeners.Count - 1))
// but this would causes possible double calls on already called callbacks, find a better method.
/// <summary> /// <summary>
/// Represents a simple event with no parameters. /// Represents a simple event with no parameters.

View File

@@ -1,74 +0,0 @@
using System.Collections;
using System.Collections.Generic;
namespace Engine.Core;
public class FastList<T> : IReadOnlyList<T>, IEnumerable<T> where T : notnull
{
private readonly List<T> items = [];
private readonly Dictionary<T, int> indexMap = [];
public int Count => items.Count;
public T this[int index] => items[index];
public void Add(T item)
{
indexMap[item] = items.Count;
items.Add(item);
}
public void RemoveAt(int i) => Remove(items[i], i);
public bool Remove(T item)
{
if (!indexMap.TryGetValue(item, out int index))
return false;
Remove(item, index);
return true;
}
private void Remove(T item, int index)
{
int lastIndex = items.Count - 1;
T lastItem = items[lastIndex];
items[index] = lastItem;
indexMap[lastItem] = index;
items.RemoveAt(lastIndex);
indexMap.Remove(item);
}
public void Insert(int index, T item)
{
items.Insert(index, item);
for (int i = index; i < items.Count; i++)
indexMap[items[i]] = i;
}
public void Clear()
{
items.Clear();
indexMap.Clear();
}
public bool Contains(T item) => indexMap.ContainsKey(item);
public int BinarySearch(T item, IComparer<T>? comparer = null) => items.BinarySearch(item, comparer);
public void Sort(IComparer<T> comparer)
{
items.Sort(comparer);
for (int i = 0; i < items.Count; i++)
indexMap[items[i]] = i;
}
public IEnumerator<T> GetEnumerator() => items.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
public FastList() { }
public FastList(int count) { items.Capacity = count; }
}

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public interface IPool<T> public interface IPool<T>
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class ListPool<T> : IPool<List<T>> public class ListPool<T> : IPool<List<T>>
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class Pool<T> : IPool<T> public class Pool<T> : IPool<T>
{ {
@@ -10,25 +10,22 @@ public class Pool<T> : IPool<T>
private readonly Func<T> generator = null!; private readonly Func<T> generator = null!;
private readonly Queue<T> queue = new(); private readonly Queue<T> queue = new();
private readonly HashSet<T> queuedHashes = [];
public T Get() public T Get()
{ {
if (!queue.TryDequeue(out T? result)) if (!queue.TryDequeue(out T? result))
result = generator(); result = generator();
queuedHashes.Remove(result);
OnRemoved?.Invoke(this, result); OnRemoved?.Invoke(this, result);
return result; return result;
} }
public void Return(T item) public void Return(T item)
{ {
if (queuedHashes.Contains(item)) if (queue.Contains(item))
return; return;
queue.Enqueue(item); queue.Enqueue(item);
queuedHashes.Add(item);
OnReturned?.Invoke(this, item); OnReturned?.Invoke(this, item);
} }

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public interface IProgressionTracker : IReadOnlyProgressionTracker public interface IProgressionTracker : IReadOnlyProgressionTracker
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public interface IReadOnlyProgressionTracker public interface IReadOnlyProgressionTracker
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class ProgressionTracker : IProgressionTracker public class ProgressionTracker : IProgressionTracker
{ {

View File

@@ -1,6 +1,6 @@
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public record struct ProgressiveTask<T>(IReadOnlyProgressionTracker ProgressionTracker, Task<T> Task) public record struct ProgressiveTask<T>(IReadOnlyProgressionTracker ProgressionTracker, Task<T> Task)
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Numerics; using System.Numerics;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class Math public static class Math
{ {

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Numerics; using System.Numerics;
namespace Engine.Core; namespace Syntriax.Engine.Core;
public static class MathExtensions public static class MathExtensions
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core namespace Syntriax.Engine.Core
{ {
// This is pretty much so the assembly gets loaded automatically because // This is pretty much so the assembly gets loaded automatically because
// the builds include the assembly but sometimes doesn't link load it at startup. // the builds include the assembly but sometimes doesn't link load it at startup.

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an Axis-Aligned Bounding Box (AABB) in 2D space. /// Represents an Axis-Aligned Bounding Box (AABB) in 2D space.

View File

@@ -1,6 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a 2D circle. /// Represents a 2D circle.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an HSV color. /// Represents an HSV color.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an HSV color. /// Represents an HSV color.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an RGB color. /// Represents an RGB color.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an RGBA color. /// Represents an RGBA color.

View File

@@ -1,6 +1,6 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a 2D line segment defined by two endpoints. /// Represents a 2D line segment defined by two endpoints.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a <see cref="Line2DEquation"/> in the form y = mx + b. /// Represents a <see cref="Line2DEquation"/> in the form y = mx + b.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a range of values along a single axis. /// Represents a range of values along a single axis.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a 3D space rotation. /// Represents a 3D space rotation.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents an infinite ray in 2D space. /// Represents an infinite ray in 2D space.

View File

@@ -1,7 +1,7 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a shape defined by a collection of vertices. /// Represents a shape defined by a collection of vertices.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
[System.Diagnostics.DebuggerDisplay("A: {A.ToString(), nq}, B: {B.ToString(), nq}, B: {C.ToString(), nq}")] [System.Diagnostics.DebuggerDisplay("A: {A.ToString(), nq}, B: {B.ToString(), nq}, B: {C.ToString(), nq}")]
public readonly struct Triangle(Vector2D A, Vector2D B, Vector2D C) public readonly struct Triangle(Vector2D A, Vector2D B, Vector2D C)

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a two-dimensional vector. /// Represents a two-dimensional vector.

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
/// <summary> /// <summary>
/// Represents a three-dimensional vector. /// Represents a three-dimensional vector.

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Class)] [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Class)]
public class IgnoreSerializationAttribute : Attribute; public class IgnoreSerializationAttribute : Attribute;

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class SerializeAllAttribute : Attribute; public class SerializeAllAttribute : Attribute;

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public class SerializeAttribute : Attribute; public class SerializeAttribute : Attribute;

View File

@@ -1,3 +1,3 @@
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public record class EntityReference(string? Id = null); public record class EntityReference(string? Id = null);

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public class EntityRegistry public class EntityRegistry
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public interface ISerializer public interface ISerializer
{ {

View File

@@ -2,9 +2,9 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using Engine.Core.Factory; using Syntriax.Engine.Core.Factory;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public class SerializedClass public class SerializedClass
{ {

View File

@@ -1,6 +1,6 @@
using System; using System;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public class TypeContainer public class TypeContainer
{ {

View File

@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
namespace Engine.Core.Serialization; namespace Syntriax.Engine.Core.Serialization;
public static class Utils public static class Utils
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
public class StateEnable : IStateEnable public class StateEnable : IStateEnable
{ {

View File

@@ -1,4 +1,4 @@
namespace Engine.Core; namespace Syntriax.Engine.Core;
internal static class Constants internal static class Constants
{ {

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