From 41dbab5ce36d1e19917d80ba23482cbbd5b04533 Mon Sep 17 00:00:00 2001 From: avery Date: Sat, 28 Feb 2026 21:11:47 -0500 Subject: [PATCH] Attributes Officially Finished! --- AwperativeKernel/AwperativeKernel.csproj | 3 - .../Kernel/Atrributes/AwperativeAttributes.cs | 368 ------------------ .../Kernel/Atrributes/DebugAttributes.cs | 295 ++++++++++++++ .../Kernel/Atrributes/MarkerAttributes.cs | 33 ++ .../Kernel/Component/Component.cs | 40 +- .../Component/ComponentCalculatedProperty.cs | 2 +- .../Kernel/Component/ComponentLambda.cs | 7 +- .../ComponentDocker/Core/ComponentDocker.cs | 9 +- .../Core/ComponentDockerExposure.cs | 12 +- .../Core/ComponentDockerManagement.cs | 18 +- AwperativeKernel/Kernel/Debug/Debug.cs | 2 +- .../Kernel/Overhead/Awperative/Awperative.cs | 121 ++++-- .../Kernel/RequiredModules/IDebugger.cs | 35 ++ .../Kernel/RequiredModules/IModuleManager.cs | 11 + .../AwperativeKernel.csproj.nuget.dgspec.json | 22 +- .../obj/AwperativeKernel.csproj.nuget.g.props | 8 +- .../net8.0/AwperativeKernel.AssemblyInfo.cs | 2 +- .../AwperativeKernel.AssemblyInfoInputs.cache | 2 +- ....GeneratedMSBuildEditorConfig.editorconfig | 4 +- .../net8.0/AwperativeKernel.assets.cache | Bin 8640 -> 8294 bytes ...ativeKernel.csproj.AssemblyReference.cache | Bin 4333 -> 4263 bytes ...ativeKernel.csproj.CoreCompileInputs.cache | 2 +- .../obj/Debug/net8.0/AwperativeKernel.dll | Bin 33792 -> 35328 bytes .../obj/Debug/net8.0/AwperativeKernel.pdb | Bin 23512 -> 24380 bytes .../obj/Debug/net8.0/ref/AwperativeKernel.dll | Bin 9728 -> 16896 bytes .../Debug/net8.0/refint/AwperativeKernel.dll | Bin 16384 -> 16896 bytes AwperativeKernel/obj/project.assets.json | 20 +- AwperativeKernel/obj/project.nuget.cache | 34 +- AwperativeKernel/obj/project.packagespec.json | 2 +- .../obj/rider.project.model.nuget.info | 2 +- .../obj/rider.project.restore.info | 2 +- 31 files changed, 553 insertions(+), 503 deletions(-) delete mode 100644 AwperativeKernel/Kernel/Atrributes/AwperativeAttributes.cs create mode 100644 AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs create mode 100644 AwperativeKernel/Kernel/Atrributes/MarkerAttributes.cs create mode 100644 AwperativeKernel/Kernel/RequiredModules/IDebugger.cs create mode 100644 AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs diff --git a/AwperativeKernel/AwperativeKernel.csproj b/AwperativeKernel/AwperativeKernel.csproj index 51ffc08..3debb06 100644 --- a/AwperativeKernel/AwperativeKernel.csproj +++ b/AwperativeKernel/AwperativeKernel.csproj @@ -10,7 +10,4 @@ - - - \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Atrributes/AwperativeAttributes.cs b/AwperativeKernel/Kernel/Atrributes/AwperativeAttributes.cs deleted file mode 100644 index 95be806..0000000 --- a/AwperativeKernel/Kernel/Atrributes/AwperativeAttributes.cs +++ /dev/null @@ -1,368 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - - -namespace AwperativeKernel; - - -/// -/// Requires that the Docker owns the parameter -/// -[AttributeUsage(AttributeTargets.All)] -public class DockerOwns : Attribute -{ - - - /// - /// Verifies if the Component is actually owned by Docker. Throws an error if not. - /// - /// Docker we are checking ownership for - /// Component to check for - public static bool VerifyOrThrow(ComponentDocker __docker, Component __component) { - if (__docker.Contains(__component)) return true; - - Debug.LogError("Docker does not own the Component!", ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ - __component.GetType().Name, - __component.Name, - __component.GetHashCode().ToString("N0"), - __docker.GetType().Name, - __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, - __docker.GetHashCode().ToString("N0") - ]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the Docker does not own the parameter -/// -[AttributeUsage(AttributeTargets.All)] -public class DockerDoesntOwn : Attribute -{ - - - /// - /// Verifies if the Component is actually not owned by Docker. Throws an error if not. - /// - /// Docker we are checking ownership for - /// Component to check for - public static bool VerifyOrThrow(ComponentDocker __docker, Component __component) { - if (!__docker.Contains(__component)) return true; - - Debug.LogError("Docker owns the Component!", ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ - __component.GetType().Name, - __component.Name, - __component.GetHashCode().ToString("N0"), - __docker.GetType().Name, - __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, - __docker.GetHashCode().ToString("N0") - ]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the component is not attached to any Docker -/// -[AttributeUsage(AttributeTargets.All)] -public class OrphanComponent : Attribute -{ - - - /// - /// Verifies if the Component is an orphan, not fully accurate, because it only checks if the docker is null, this means it is technically possible - /// to have a component already attached to a docker, and still verify it as false if Docker is null, but this should be impossible in practice. - /// - /// - /// - public static bool VerifyOrThrow(Component __component) { - if (__component.ComponentDocker == null) return true; - - Debug.LogError("Component is already owned!", ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ - __component.GetType().Name, - __component.Name, - __component.GetHashCode().ToString("N0"), - __component.ComponentDocker.GetType().Name, - __component.ComponentDocker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, - __component.ComponentDocker.GetHashCode().ToString("N0") - ]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the Component is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class ComponentNotNull : Attribute -{ - - - /// - /// Verifies if the Component is not null! Throws an error otherwise. - /// - /// - /// - public static bool VerifyOrThrow(Component __component) { - if (__component != null) return true; - - Debug.LogError("Component is null!"); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the Docker is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class DockerNotNull : Attribute -{ - - - /// - /// Verifies if the Docker is not null! Throws an error otherwise. - /// - /// - /// - public static bool VerifyOrThrow(ComponentDocker __componentDocker) { - if (__componentDocker != null) return true; - - Debug.LogError("Docker is null!"); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the Scene is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class SceneNotNull : Attribute -{ - - - /// - /// Verifies if the Scene is not null! Throws an error otherwise. - /// - /// - public static bool VerifyOrThrow(Scene __scene) { - if (__scene != null) return true; - - Debug.LogError("Scene is null!"); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that everything in the collection is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class CollectionNotNull : Attribute -{ - - - /// - /// Verifies if the Scene is not null! Throws an error otherwise. - /// - /// - public static bool VerifyOrThrow(Collection __collection) { - for (var i = 0; i < __collection.Count; i++) - if (__collection[i] == null) - Debug.LogError("A Given Collection has null members!", ["Type"], [__collection.GetType().Name]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that everything in the collection is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class EnumeratorNotNull : Attribute -{ - - - /// - /// Verifies if the Scene is not null! Throws an error otherwise. - /// - /// - public static bool VerifyOrThrow(IEnumerable __enumerator) { - foreach (object obj in __enumerator) - if (obj == null) - Debug.LogError("A Given Enumerator has null members!", ["Type"], [__enumerator.GetType().Name]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the object is not null -/// -[AttributeUsage(AttributeTargets.All)] -public class NotNull : Attribute -{ - - - /// - /// Verifies if the Scene is not null! Throws an error otherwise. - /// - /// - public static bool VerifyOrThrow(Object __object) { - if (__object != null) return true; - - Debug.LogError("A Given parameter is null!", ["Type"], - [__object.GetType().Name - ]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the Docker is a different docker than the one given -/// -[AttributeUsage(AttributeTargets.All)] -public class DifferentDocker : Attribute -{ - - - /// - /// Verifies if the Dockers are different! - /// - /// - public static bool VerifyOrThrow(ComponentDocker __docker, ComponentDocker __other) { - if (__docker != __other) return true; - - Debug.LogError("The Dockers are the same!", ["DockerType, DockerName, DockerHash"], [ - __docker.GetType().Name, - __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, - __docker.GetHashCode().ToString("N0") - ]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the index fits a given collection -/// -[AttributeUsage(AttributeTargets.All)] -public class ValueFitsRange : Attribute -{ - - - /// - /// Verifies if the value fits a range - /// - /// - /// - public static bool VerifyOrThrow(int __index, int __min, int __max) { - if (__index >= __min && __index <= __max) return true; - - Debug.LogError("Value does not fit range!", ["Index"], [__index.ToString("N0")]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the index fits a given collection -/// -[AttributeUsage(AttributeTargets.All)] -public class CollectionContains : Attribute -{ - - - /// - /// Verifies if the value fits a range - /// - /// - /// - public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { - if(__collection.Contains(__object)) return true; - - Debug.LogError("Collection does not contain object!", ["ObjectType"], - [__object.GetType().Name]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Requires that the index fits a given collection -/// -[AttributeUsage(AttributeTargets.All)] -public class CollectionDoesntContain : Attribute -{ - - - /// - /// Verifies if the value fits a range - /// - /// - /// - public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { - if(!__collection.Contains(__object)) return true; - - Debug.LogError("Collection already contains object!", ["ObjectType"], - [__object.GetType().Name]); - - return Debug.IgnoreErrors; - } -} - - - -/// -/// Shows that the given object is unsafe (ex. it doesn't check for null values and such, or it doesn't have guardrails based on cases). -/// This is just for internal/private methods to remind myself how to call it :) The reasoning is case by case, but most of the time, -/// it is because all of the exposing public methods already check, and double checks would only slow me down -/// -[AttributeUsage(AttributeTargets.All)] -public class UnsafeInternal : Attribute { } - - - -/// -/// Shows that the given object (meant for external use) is calculated every time it is called! Good to know for performance heavy systems. -/// -[AttributeUsage(AttributeTargets.All)] -public class CalculatedProperty() : Attribute { } - - - -/// -/// Just a way to write how expensive a calculated property can be. -/// -[AttributeUsage(AttributeTargets.All)] -public class CalculatedPropertyExpense(string Expense) : Attribute { } \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs new file mode 100644 index 0000000..3e16cfc --- /dev/null +++ b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs @@ -0,0 +1,295 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + + +namespace AwperativeKernel; + + +/// +/// Holds a myriad of useful attributes which you are more than welcome to use! These attributes are not meant for reflection, but merely as a means of straightforward debugging. +/// Each attribute gives has a method called VerifyOrThrow() which can differ parameter wise. VerifyOrThrow() returns a bool based on if the condition is true or not. +/// If it is false it will try to throw an error, and returns false as well.The only time this behavior differs, is if Awperative is set to IgnoreErrors. In that case it will return true no matter what. +/// (However it will still debug unless that is disabled too). +/// +/// +/// The attributes have been designed to be used in methods like so : if(!Attribute.VerifyOrThrow()) return; This usage allows the attribute to control the flow of output, and halt any unsafe process. +/// However, nothing is stopping you from using them any other way, so go wild. Feel free to make more, or use these in your own code! +/// +/// Avery Norris +public static class DebugAttributes +{ + #region Docker/Entity + + /// Requires that any Component is owned by the Docker + [AttributeUsage(AttributeTargets.All)] + public class DockerOwns : Attribute + { + + + /// Returns true or false based on the given condition from the attribute, unless Debug.IgnoreErrors is true, in which it will always return true, but still try to throw errors. + /// It is required to use VerifyOrThrow() to validate important conditions for methods within the kernel. You may also feel free to use this outside in any modules or games. + /// It is easiest to use VerifyOrThrow like : (In your method) if(!Attribute.VerifyOrThrow()) return; That way the attribute can exit the code if the condition is false. + public static bool VerifyOrThrow(ComponentDocker __docker, Component __component) { + if (__docker.Contains(__component)) return true; + + Debug.LogError("Docker does not own the Component!", + ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ + __component.GetType().Name, + __component.Name, + __component.GetHashCode().ToString("N0"), + __docker.GetType().Name, + __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, + __docker.GetHashCode().ToString("N0") + ]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that the Docker does not own the given Component + [AttributeUsage(AttributeTargets.All)] + public class DockerDoesntOwn : Attribute + { + + + /// + public static bool VerifyOrThrow(ComponentDocker __docker, Component __component) { + if (!__docker.Contains(__component)) return true; + + Debug.LogError("Docker owns the Component!", + ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ + __component.GetType().Name, + __component.Name, + __component.GetHashCode().ToString("N0"), + __docker.GetType().Name, + __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, + __docker.GetHashCode().ToString("N0") + ]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that the Component does not belong to a Docker + [AttributeUsage(AttributeTargets.All)] + public class OrphanComponent : Attribute + { + + + /// + public static bool VerifyOrThrow(Component __component) { + if (__component.ComponentDocker == null) return true; + + Debug.LogError("Component is already owned!", + ["ComponentType", "ComponentName", "ComponentHash", "DockerType", "DockerName", "DockerHash"], [ + __component.GetType().Name, + __component.Name, + __component.GetHashCode().ToString("N0"), + __component.ComponentDocker.GetType().Name, + __component.ComponentDocker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, + __component.ComponentDocker.GetHashCode().ToString("N0") + ]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that a given Docker is not the same + [AttributeUsage(AttributeTargets.All)] + public class DifferentDocker : Attribute + { + + + /// + public static bool VerifyOrThrow(ComponentDocker __docker, ComponentDocker __other) { + if (!__docker.Equals(__other)) return true; + + Debug.LogError("The dockers are the same!", ["DockerType", "DockerName", "DockerHash"], [ + __docker.GetType().Name, + __docker switch { Scene scene => scene.Name, Component component => component.Name, _ => "unknown" }, + __docker.GetHashCode().ToString("N0") + ]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that the Component is not null + [AttributeUsage(AttributeTargets.All)] + public class ComponentNotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(Component __component) { + if (__component != null) return true; + + Debug.LogError("Component is null!"); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that the Docker is not null + [AttributeUsage(AttributeTargets.All)] + public class DockerNotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(ComponentDocker __componentDocker) { + if (__componentDocker != null) return true; + + Debug.LogError("Docker is null!"); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that a given Scene is not null + [AttributeUsage(AttributeTargets.All)] + public class SceneNotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(Scene __scene) { + if (__scene != null) return true; + + Debug.LogError("Scene is null!"); + + return Debug.IgnoreErrors; + } + } + + #endregion + + #region Null/Collection + + /// Requires all elements in a Collection are not null + [AttributeUsage(AttributeTargets.All)] + public class CollectionNotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(ICollection __collection) { + foreach (object obj in __collection) { + if (obj == null) { + Debug.LogError("A given enumerator has null members!", ["Type"], [__collection.GetType().Name]); + return Debug.IgnoreErrors; + } + } + + return true; + } + } + + + + /// Requires all elements in an Enumerator are not null + [AttributeUsage(AttributeTargets.All)] + public class EnumeratorNotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(IEnumerable __enumerator) { + foreach (object obj in __enumerator) { + if (obj == null) { + Debug.LogError("A given enumerator has null members!", ["Type"], [__enumerator.GetType().Name]); + return Debug.IgnoreErrors; + } + } + + return true; + } + } + + + + /// Requires a given object is not null + [AttributeUsage(AttributeTargets.All)] + public class NotNull : Attribute + { + + + /// + public static bool VerifyOrThrow(Object __object) { + if (__object != null) return true; + + Debug.LogError("A given object is null!"); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that an integer fits a range + [AttributeUsage(AttributeTargets.All)] + public class ValueFitsRange : Attribute + { + + + /// + public static bool VerifyOrThrow(int __index, int __min, int __max) { + if (__index >= __min && __index <= __max) return true; + + Debug.LogError("Value does not fit range!", ["Index"], [__index.ToString("N0")]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that a collection contains the given item + [AttributeUsage(AttributeTargets.All)] + public class CollectionContains : Attribute + { + + + /// + public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { + if (__collection.Contains(__object)) return true; + + Debug.LogError("Collection does not contain object!", ["ObjectType"], [__object.GetType().Name]); + + return Debug.IgnoreErrors; + } + } + + + + /// Requires that a collection does not contain the given item + [AttributeUsage(AttributeTargets.All)] + public class CollectionDoesntContain : Attribute + { + + + /// + public static bool VerifyOrThrow<__Type>(__Type __object, ICollection<__Type> __collection) { + if (!__collection.Contains(__object)) return true; + + Debug.LogError("Collection already contains object!", ["ObjectType"], [__object.GetType().Name]); + + return Debug.IgnoreErrors; + } + } + + #endregion +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Atrributes/MarkerAttributes.cs b/AwperativeKernel/Kernel/Atrributes/MarkerAttributes.cs new file mode 100644 index 0000000..2161b04 --- /dev/null +++ b/AwperativeKernel/Kernel/Atrributes/MarkerAttributes.cs @@ -0,0 +1,33 @@ +using System; + + +namespace AwperativeKernel; + + +public static class MarkerAttributes +{ + + /// + /// Shows that the given object is unsafe (ex. it doesn't check for null values and such, or it doesn't have guardrails based on cases). + /// This is just for internal/private methods to remind myself how to call it :) The reasoning is case by case, but most of the time, + /// it is because all of the exposing public methods already check, and double checks would only slow me down + /// + [AttributeUsage(AttributeTargets.All)] + public class UnsafeInternal : Attribute { } + + + + /// + /// Shows that the given object (meant for external use) is calculated every time it is called! Good to know for performance heavy systems. + /// + [AttributeUsage(AttributeTargets.All)] + public class CalculatedProperty() : Attribute { } + + + + /// + /// Just a way to write how expensive a calculated property can be. + /// + [AttributeUsage(AttributeTargets.All)] + public class CalculatedPropertyExpense(string Expense) : Attribute { } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Component/Component.cs b/AwperativeKernel/Kernel/Component/Component.cs index 0bb47b0..2dfb875 100644 --- a/AwperativeKernel/Kernel/Component/Component.cs +++ b/AwperativeKernel/Kernel/Component/Component.cs @@ -13,14 +13,14 @@ namespace AwperativeKernel; -public abstract partial class Component : ComponentDocker, IDisposable +public abstract partial class Component : ComponentDocker { /// Current parent of the Component. Can be either Scene or another Component. - [UnsafeInternal] - internal ComponentDocker ComponentDocker { get; set; } = null; + [MarkerAttributes.UnsafeInternal] + public ComponentDocker ComponentDocker { get; set; } = null; /// @@ -29,28 +29,28 @@ public abstract partial class Component : ComponentDocker, IDisposable [NotNull] public string Name { get => _name; - set { if (!NotNull.VerifyOrThrow(value)) return; _name = value; } - } [UnsafeInternal] private string _name; + set { if (!DebugAttributes.NotNull.VerifyOrThrow(value)) return; _name = value; } + } [MarkerAttributes.UnsafeInternal] private string _name; /// Represents the state of this Component, The largest bit represents if the Component is enabled or not, while the /// next 7 represent its priority - [UnsafeInternal] + [MarkerAttributes.UnsafeInternal] private byte OrderProfile; /// If the component receives time events or not. - [CalculatedProperty, CalculatedPropertyExpense("Very Low")] + [MarkerAttributes.CalculatedProperty, MarkerAttributes.CalculatedPropertyExpense("Very Low")] public bool Enabled { get => (OrderProfile & 128) > 0; set => OrderProfile = (byte)((OrderProfile & 127) | (value ? 128 : 0)); } /// Represents the Component's Update priority, can be set to any value ranging from -64 to 63; otherwise an error will throw! - [CalculatedProperty, CalculatedPropertyExpense("Very Low")] + [MarkerAttributes.CalculatedProperty, MarkerAttributes.CalculatedPropertyExpense("Very Low")] public int Priority { get => (sbyte)(OrderProfile << 1) >> 1; set { - if(!ValueFitsRange.VerifyOrThrow(value, -64, 63)) return; + if(!DebugAttributes.ValueFitsRange.VerifyOrThrow(value, -64, 63)) return; OrderProfile = (byte)((OrderProfile & 0x80) | (value & 0x7F)); ComponentDocker.UpdatePriority(this, value); } @@ -64,7 +64,7 @@ public abstract partial class Component : ComponentDocker, IDisposable /// Attempts to send an Event to the Component, terminates if the Component does not have the given Event /// /// Type of Event - [UnsafeInternal] + [MarkerAttributes.UnsafeInternal] internal void TryEvent(int __timeEvent) { Awperative._TypeAssociatedTimeEvents[GetType()][__timeEvent]?.Invoke(this); } @@ -75,7 +75,7 @@ public abstract partial class Component : ComponentDocker, IDisposable /// Identifiers for Components. /// public IReadOnlyList Tags => [.._tags]; - [UnsafeInternal] internal HashSet _tags = []; + [MarkerAttributes.UnsafeInternal] internal HashSet _tags = []; @@ -85,10 +85,10 @@ public abstract partial class Component : ComponentDocker, IDisposable /// Adds a new tag to the Component /// /// The tag to add - public void AddTag([NotNull, CollectionDoesntContain] string __tag) + public void AddTag([DebugAttributes.NotNull, DebugAttributes.CollectionDoesntContain] string __tag) { - if(!NotNull.VerifyOrThrow(__tag)) return; - if(!CollectionDoesntContain.VerifyOrThrow(__tag, _tags)) return; + if(!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; + if(!DebugAttributes.CollectionDoesntContain.VerifyOrThrow(__tag, _tags)) return; _tags.Add(__tag); ComponentDocker.AddTagToComponent(__tag, this); @@ -102,20 +102,14 @@ public abstract partial class Component : ComponentDocker, IDisposable /// Adds a new tag to the Component /// /// The tag to add - public void RemoveTag([NotNull,CollectionContains] string __tag) + public void RemoveTag([DebugAttributes.NotNull,DebugAttributes.CollectionContains] string __tag) { - if (!NotNull.VerifyOrThrow(__tag)) return; - if(!CollectionContains.VerifyOrThrow(__tag, _tags)) return; + if (!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; + if(!DebugAttributes.CollectionContains.VerifyOrThrow(__tag, _tags)) return; _tags.Remove(__tag); ComponentDocker.RemoveTagFromComponent(__tag, this); } - - - - - - public virtual void Dispose() { GC.SuppressFinalize(this); } public override string ToString() { return this.Name; diff --git a/AwperativeKernel/Kernel/Component/ComponentCalculatedProperty.cs b/AwperativeKernel/Kernel/Component/ComponentCalculatedProperty.cs index 37a05d2..6f379c1 100644 --- a/AwperativeKernel/Kernel/Component/ComponentCalculatedProperty.cs +++ b/AwperativeKernel/Kernel/Component/ComponentCalculatedProperty.cs @@ -4,7 +4,7 @@ namespace AwperativeKernel; public abstract partial class Component { - /// + /// /// Scene the Component resides in. /// [CalculatedProperty, CalculatedPropertyExpense("Medium: O(Parents)")] diff --git a/AwperativeKernel/Kernel/Component/ComponentLambda.cs b/AwperativeKernel/Kernel/Component/ComponentLambda.cs index 02c0253..8dc598e 100644 --- a/AwperativeKernel/Kernel/Component/ComponentLambda.cs +++ b/AwperativeKernel/Kernel/Component/ComponentLambda.cs @@ -24,5 +24,10 @@ public abstract partial class Component /// public void Move(ComponentDocker __newDocker) => ComponentDocker.Move(this, __newDocker); - + + + + /// Makes the Component destroy itself + public void Destroy() => ComponentDocker.Destroy(this); + } \ No newline at end of file diff --git a/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDocker.cs b/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDocker.cs index d9d4eef..4709020 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDocker.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDocker.cs @@ -9,7 +9,7 @@ using System.Reflection; namespace AwperativeKernel; /// -/// Base class for all Awperative Entities. Responsible for Managing hierarchy between Components and Scenes, has Extensive Component Manipulation Available. +/// Base class for all Awperative objects. Responsible for Managing hierarchy between Components and Scenes, has Extensive Component Manipulation Available. /// Also transfers Time and Carries most of the responsibilities akin to the Component. /// /// Please don't inherit this. I don't know why you would @@ -107,7 +107,7 @@ public abstract partial class ComponentDocker : IEnumerable, IEnumerable @@ -119,9 +119,9 @@ public abstract partial class ComponentDocker : IEnumerable, IEnumerable @@ -165,5 +165,4 @@ public abstract partial class ComponentDocker : IEnumerable, IEnumerable /// /// - public bool Contains([ComponentNotNull,DockerOwns] Component __component) - => NotNull.VerifyOrThrow(__component) && DockerOwns.VerifyOrThrow(this, __component) && _components.Contains(__component); + public bool Contains([ComponentNotNull] Component __component) + => NotNull.VerifyOrThrow(__component) && _componentTypeDictionary.TryGetValue(__component.GetType(), out var components) && components.Contains(__component); /// /// Finds all Components that have all the given tags /// /// /// - public bool Contains<__Type>(string __tag) { - return GetAll<__Type>(__tag).Any(); - } + public bool Contains<__Type>([NotNull] string __tag) + => NotNull.VerifyOrThrow(__tag) && GetAll<__Type>(__tag).Any(); /// /// Finds all Components that have all the given tags @@ -116,7 +116,7 @@ public abstract partial class ComponentDocker /// The Type of Components to search for /// public IReadOnlyList<__Type> GetAll<__Type>() where __Type : Component { - return (IReadOnlyList<__Type>)_componentTypeDictionary.GetValueOrDefault(typeof(__Type)).ToList(); + return _componentTypeDictionary.TryGetValue(typeof(__Type), out var components) ? components.OfType<__Type>().ToList() : []; } /// diff --git a/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDockerManagement.cs b/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDockerManagement.cs index 144a4f0..0357b89 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDockerManagement.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/Core/ComponentDockerManagement.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; @@ -134,16 +135,17 @@ public abstract partial class ComponentDocker /// Target Docker /// Type of Components to transfer public void MoveAll<__Type>([DockerNotNull, DifferentDocker] ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(), __componentDocker); - - - - - + + + + + public TimeSpan total; /// /// Destroys a Component attached to the Docker /// /// public void Destroy([ComponentNotNull,DockerOwns] Component __component) { + Stopwatch timer = Stopwatch.StartNew(); if(!ComponentNotNull.VerifyOrThrow(__component)) return; if(!DockerOwns.VerifyOrThrow(this, __component)) return; @@ -152,8 +154,8 @@ public abstract partial class ComponentDocker RemoveComponentFromLists(__component); __component.ComponentDocker = null; - - __component.Dispose(); + timer.Stop(); + total += timer.Elapsed; } @@ -162,7 +164,7 @@ public abstract partial class ComponentDocker /// Destroys the first found Component of a given type /// /// Type of Component to destroy - public void Destroy<__Type>() where __Type : Component => Destroy(Get<__Type>()); + public void Destroy<__Type>() where __Type : Component => DestroyAll(GetAll<__Type>()); diff --git a/AwperativeKernel/Kernel/Debug/Debug.cs b/AwperativeKernel/Kernel/Debug/Debug.cs index 9575a44..8edcb95 100644 --- a/AwperativeKernel/Kernel/Debug/Debug.cs +++ b/AwperativeKernel/Kernel/Debug/Debug.cs @@ -145,7 +145,7 @@ public static class Debug /// Writes the current message to the log file. /// /// Message to debug - public static void LogError(string __message) => LogGeneric(__message, "ERR", [], []); + public static void LogError(string __message) => LogGeneric(__message, "ERR", [], [], ThrowExceptions); /// /// Writes the current message to the log file. With any given call sign. diff --git a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs index ec87d59..5d49957 100644 --- a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs +++ b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs @@ -44,6 +44,12 @@ public static partial class Awperative public static bool IsStarted { get; private set; } = false; /// Displays if the update loop is active public static bool IsRunning { get; private set; } = false; + + + + /// Awperative's debugger of choice + public static IDebugger Debug { get; set; } + public static IModuleManager ModuleManager { get; set; } /// @@ -58,6 +64,14 @@ public static partial class Awperative } + + public static void AddScene(Scene __scene) { + if (!ContainsScene(__scene.Name)) { + _scenes.Add(__scene); + } else Debug.LogError("Awperative already has a Scene with that name!", ["Scene", "Name"], [GetScene(__scene.Name).GetHashCode().ToString(), __scene.Name]); return null; + } + + /// /// Finds a Scene from a given name @@ -90,58 +104,81 @@ public static partial class Awperative /// /// Name of the scene public static void CloseScene(string __name) => _scenes.Remove(GetScene(__name)); - - - - + + + + /// /// Gets Awperative ready to begin! Compiles Component functions etc. Please call before doing anything Awperative /// related! /// - public static void Start() { - if(IsStarted) return; + public static void Start(string moduleManagerPath) { + if (IsStarted) return; IsStarted = true; - - Debug.Initiate(); - + + //SPAGHETTI CODE FIX LATER! maybe move to static method in IModuleManager + foreach (Type type in Assembly.LoadFrom(moduleManagerPath).GetTypes()) { + Console.WriteLine(type.Name); + if (type.GetInterfaces().Contains(typeof(IModuleManager))) { + ModuleManager = (IModuleManager)Activator.CreateInstance(type); + } + } + + List targets = [Assembly.GetCallingAssembly()]; + foreach (Assembly module in ModuleManager.GetDependencies()) { + targets.Add(module); + } + //Load in all Components nd find the associated types. - Debug.LogAction("Evaluating Components!"); - foreach (Type type in Assembly.GetCallingAssembly().GetTypes()) { - if (type.IsSubclassOf(typeof(Component))) { + foreach (var t in targets) { + Console.WriteLine(t.FullName); + foreach (Type type in t.GetTypes()) { + if (type.IsSubclassOf(typeof(Component))) { - Action[] timeEvents = new Action[ComponentEvents.Count]; + Action[] timeEvents = new Action[ComponentEvents.Count]; - byte eventProfile = 0; - List debugProfile = []; + byte eventProfile = 0; + List debugProfile = []; - for(int i = 0; i < ComponentEvents.Count; i++) { - MethodInfo eventMethod = type.GetMethod(ComponentEvents[i]); + for (int i = 0; i < ComponentEvents.Count; i++) { + MethodInfo eventMethod = type.GetMethod(ComponentEvents[i]); - if (eventMethod != null) { - - debugProfile.Add(ComponentEvents[i]); - - var ComponentInstanceParameter = Expression.Parameter(typeof(Component), "__component"); - var Casting = Expression.Convert(ComponentInstanceParameter, type); - var Call = Expression.Call(Casting, eventMethod); - var Lambda = Expression.Lambda>(Call, ComponentInstanceParameter); - timeEvents[i] = Lambda.Compile(); - - } else timeEvents[i] = null; + if (eventMethod != null) { + + var ComponentInstanceParameter = Expression.Parameter(typeof(Component), "__component"); + var Casting = Expression.Convert(ComponentInstanceParameter, type); + var Call = Expression.Call(Casting, eventMethod); + var Lambda = Expression.Lambda>(Call, ComponentInstanceParameter); + timeEvents[i] = Lambda.Compile(); + + } else timeEvents[i] = null; + } + + _TypeAssociatedTimeEvents.Add(type, timeEvents); } - - - Debug.LogAction("Evaluated Component! ", ["Type", "Time Events", "Profile"], [type.Name, "[" + string.Join(", ", debugProfile.Select(x => x.ToString())) + "]", eventProfile.ToString()]); - _TypeAssociatedTimeEvents.Add(type, timeEvents); + if (type.GetInterfaces().Contains(typeof(IDebugger))) { + if (Debug == null) { + if (type.GetConstructor(Type.EmptyTypes) != null) + Debug = (IDebugger)Activator.CreateInstance(type); + else throw new Exception("Awperative doesn't support IDebugger constructor!"); + } else { + throw new Exception("Awperative found multiple debuggers! There can only be one."); + } + } } } - + if (Debug == null) + throw new Exception("Awperative doesn't have a Debugger!"); + + Debug.Start(); + + Debug.LogAction("Successfully Compiled Classes!"); } - + internal static Comparer _prioritySorter = Comparer.Create((a, b) => { int result = b.Priority.CompareTo(a.Priority); return (result != 0) ? result : a.GetHashCode().CompareTo(b.GetHashCode()); @@ -164,13 +201,25 @@ public static partial class Awperative //Update, 2 //Draw 3 //Create, 4 - //Destroy, 5 + //Remove, 5 // 0000 0000 // + public static void TestUpdate() { + foreach (Scene scene in Scenes) { + scene.ChainEvent(2); + } + } + + public static void TestDraw() { + foreach (Scene scene in Scenes) { + scene.ChainEvent(3); + } + } - internal static ReadOnlyCollection ComponentEvents = new(["Load", "Unload", "Update", "Draw", "Create", "Destroy"]); + + internal static ReadOnlyCollection ComponentEvents = new(["Load", "Unload", "Update", "Draw", "Create", "Remove"]); diff --git a/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs new file mode 100644 index 0000000..ceb6f31 --- /dev/null +++ b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; + + + +namespace AwperativeKernel; + + +public interface IDebugger +{ + + public void Start(); + public void Stop(); + + public void LogAction(string __message); + public void LogAction(string __message, IReadOnlyList __values, IReadOnlyList __args); + + public void LogWarning(string __message); + public void LogWarning(string __message, IReadOnlyList __values, IReadOnlyList __args); + + public void LogError(string __message); + public void LogError(string __message, IReadOnlyList __values, IReadOnlyList __args); + + + + public bool ThrowExceptions { get; set; } + public bool IgnoreErrors { get; set; } + public bool DebugErrors { get; set; } + + +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs b/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs new file mode 100644 index 0000000..b80d675 --- /dev/null +++ b/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using System.Reflection; + + +namespace AwperativeKernel; + + +public interface IModuleManager +{ + public IReadOnlyList GetDependencies(); +} \ No newline at end of file diff --git a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json index 93d3527..9bb9d23 100644 --- a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json +++ b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.dgspec.json @@ -1,20 +1,20 @@ { "format": 1, "restore": { - "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": {} + "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": {} }, "projects": { - "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": { + "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj": { "version": "1.0.0", "restore": { - "projectUniqueName": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "projectUniqueName": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", "projectName": "AwperativeKernel", - "projectPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", - "packagesPath": "/Users/averynorris/.nuget/packages/", - "outputPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/obj/", + "projectPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "packagesPath": "/home/avery/.nuget/packages/", + "outputPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/obj/", "projectStyle": "PackageReference", "configFilePaths": [ - "/Users/averynorris/.nuget/NuGet/NuGet.Config" + "/home/avery/.nuget/NuGet/NuGet.Config" ], "originalTargetFrameworks": [ "net8.0" @@ -38,7 +38,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "10.0.100" + "SdkAnalysisLevel": "9.0.300" }, "frameworks": { "net8.0": { @@ -63,11 +63,11 @@ "downloadDependencies": [ { "name": "Microsoft.AspNetCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" }, { "name": "Microsoft.NETCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" } ], "frameworkReferences": { @@ -75,7 +75,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json" } } } diff --git a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props index 25b6aa4..08dec0c 100644 --- a/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props +++ b/AwperativeKernel/obj/AwperativeKernel.csproj.nuget.g.props @@ -4,12 +4,12 @@ True NuGet $(MSBuildThisFileDirectory)project.assets.json - /Users/averynorris/.nuget/packages/ - /Users/averynorris/.nuget/packages/ + /home/avery/.nuget/packages/ + /home/avery/.nuget/packages/ PackageReference - 7.0.0 + 6.14.0 - + \ No newline at end of file diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs index 7e5e8ec..26a1202 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+4a9f3d4476aad85ea81cf5539e1cbe307a50bee5")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8c3803fcdf9411da13e462596847a88f1080bb39")] [assembly: System.Reflection.AssemblyProductAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyTitleAttribute("AwperativeKernel")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache index fa90c60..49ebfc5 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache @@ -1 +1 @@ -d26fbee268a2a19e12312d333a763a70899a64f6b3b49b30e13a2696cde111a2 +1401ec548e06fa205cbd38d50de2d7971689c7694c0af3dc509c2945921d606a diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig index cb335e2..cbacfa1 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig @@ -1,7 +1,5 @@ is_global = true build_property.TargetFramework = net8.0 -build_property.TargetFrameworkIdentifier = .NETCoreApp -build_property.TargetFrameworkVersion = v8.0 build_property.TargetPlatformMinVersion = build_property.UsingMicrosoftNETSdkWeb = build_property.ProjectTypeGuids = @@ -10,7 +8,7 @@ build_property.PlatformNeutralAssembly = build_property.EnforceExtendedAnalyzerRules = build_property._SupportedPlatformList = Linux,macOS,Windows build_property.RootNamespace = Awperative -build_property.ProjectDir = /Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/ +build_property.ProjectDir = /home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/ build_property.EnableComHosting = build_property.EnableGeneratedComInterfaceComImportInterop = build_property.EffectiveAnalysisLevelStyle = 8.0 diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache index 8dcee15461c66139f60714b33e562a45a82897bf..3412d3519a672cb57dcb427ab0080be30f985d0a 100644 GIT binary patch delta 1183 zcmZva%PT~26vt=W;SPR`%jGwh$@N%y&V@=PI*S&K}kNR2HE zQjD@9{{cz1b|@(pEKJG0Wij{u&TsRp^F8O=`Sd+E&Cd-jfv)yOVzb%86`}X_g@=F? zYaQD@xZ2$sxPHBR2{k$C$*d@IT5X};^#3yTzgL-@o*GxQ#qqf%hzM=bsE70=*UlVn z*hy1>x67o*DqQAP!>Zjw`mI8k_rjMxVX`-@>Qg$&khQzpslr=|%-SSGAA~p$nJ`b3 zLBOTLCnuATNpJ;W%^_!P+D%nQjI1RWwA4NGUJ;=g{Am>9Zo`->ppvKTvSGf%>}&8o z@l6=7pB+z#UifxWoOLOkvaG-9lwnmFlb@fC{;~brzfU{jfq4z>UoJfl8ufDk$@qp}Df&i9 z9J~HudU)!GvKfuAu14T^ugCC?p#4J{yg?-hMM?9^PH2?`Jx0&6L8Zb!vI-*5%1&Su zg`Ok6R78n}z7zG^mi>sisNat2_psWJLmZV5U&l95=oo}9`pvh7zddu0e%Ewy{%##_ zGl!hFTfx`N73b>=w4nmCSs<$L)0j)n(;1#!27YGFI6t?ZmziVE%NZ6nGaoaToR8bd z!wdrF;r8+`1Ht+C!tpM{$$2+on&^}E5Z%#ck`x1cUrCBVsUY6O#*kF~HI-j&Uy*I~ z`y(4QPIV7MiXmylb{3>oeO1cmroJ$(Ak_Bl;xVa5624n(4d-0o)Hz039CLwP@Zb4{_TPe~t%vzX$PD*xr z6A*LQ>IB4G@dVVGY`~ngHybd=?aBts<%`M&48n`c1`Nc7&ISx8&juG^_syX3-8Ye5 z#y9J1RTJVKx`>7On>8``+mLr4Q;=!MyO0@3>vrWRZ74vT6zLs=swqi;ZbRRST|0xq zNt2*Zl_d$vd(datd}iL&Ge~?_Pmm}^k|4bgeQS80f#Ez)U}#5`1ZEcc*1r`nU_1{H zFsjxh0n?z*@Zd7PH84m#PY@)k;v_-Rp>O9~1%t@*2tlOkP7=g9=-d0&!9emnLm;W@ zlLYb(^cU`}gw2EJA({tOgOcX)0rVFkPci5`PZ4yg5+y;Ohn~`jNU_Oxqsl*f@zLkC z1yr;a7Iazo3Q*f}$|tiYxdq)pE%!)Jv5Vf3w7}KoiLB{bfKWnPgb=zMgwTBm;R%iO zOOTHscOf4`4$cdy8=TAK71#x(xaLyr80v&7VI#e89BrM(g<{oF{=KJ%L<-5Xe=?`GQ=^sUU3%at+Rt zK$4z7u0sgq21H%=@W%DQ4^@u1S#PRt(Wq)_)tX8I*4lYdLak-8erQ&S zq0to>Rf$Oeqi&ITqiW1ly`y-+hPpQ_*i1jGKRf?OU({K8)`)6-HxrI5QdWYxsz(ls z(o41@ht3B$WRc~!9vPs+`5<5NY^z{}c4bu*Ek~GL>xLbO-fa=M_K`3Z&ZG)sCE1n6bcD zLA2sV5iYA^np$Rh^lF@1xL%h7#{yFI+_bkY=M6 zf#vL8m9wYPRMZ+en&~scHBOYHjqG}8DD<1G88k{`r$fXndSp8`L_(5@4RLA_4Y8E_A0k7uasU7T diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache index 2b06060827edfdf5883d50b50e15263781b337aa..2072822350c4e755f5a63dc8bb919c1f6393ff6d 100644 GIT binary patch delta 234 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�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 NMf(1~n*UKA_&**ENrnIb literal 33792 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 z Yzv*)w$={o8KmNZ--v1Z#f64;?4^9iJQ~&?~ diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb index 4831b0d1066ee2590ce3fde63768e4e7acd90d4c..347b73b7ea5f66bb88bac8766d9fd5881c54062d 100644 GIT binary patch delta 13880 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 literal 9728 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 literal 16384 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 diff --git a/AwperativeKernel/obj/project.assets.json b/AwperativeKernel/obj/project.assets.json index b070dd3..40c44ad 100644 --- a/AwperativeKernel/obj/project.assets.json +++ b/AwperativeKernel/obj/project.assets.json @@ -442,19 +442,19 @@ ] }, "packageFolders": { - "/Users/averynorris/.nuget/packages/": {} + "/home/avery/.nuget/packages/": {} }, "project": { "version": "1.0.0", "restore": { - "projectUniqueName": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "projectUniqueName": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", "projectName": "AwperativeKernel", - "projectPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", - "packagesPath": "/Users/averynorris/.nuget/packages/", - "outputPath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/obj/", + "projectPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "packagesPath": "/home/avery/.nuget/packages/", + "outputPath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/obj/", "projectStyle": "PackageReference", "configFilePaths": [ - "/Users/averynorris/.nuget/NuGet/NuGet.Config" + "/home/avery/.nuget/NuGet/NuGet.Config" ], "originalTargetFrameworks": [ "net8.0" @@ -478,7 +478,7 @@ "auditLevel": "low", "auditMode": "direct" }, - "SdkAnalysisLevel": "10.0.100" + "SdkAnalysisLevel": "9.0.300" }, "frameworks": { "net8.0": { @@ -503,11 +503,11 @@ "downloadDependencies": [ { "name": "Microsoft.AspNetCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" }, { "name": "Microsoft.NETCore.App.Ref", - "version": "[8.0.23, 8.0.23]" + "version": "[8.0.24, 8.0.24]" } ], "frameworkReferences": { @@ -515,7 +515,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json" } } } diff --git a/AwperativeKernel/obj/project.nuget.cache b/AwperativeKernel/obj/project.nuget.cache index 009fa49..6b1e1e9 100644 --- a/AwperativeKernel/obj/project.nuget.cache +++ b/AwperativeKernel/obj/project.nuget.cache @@ -1,24 +1,24 @@ { "version": 2, - "dgSpecHash": "LpP/nHq7BJc=", + "dgSpecHash": "nvLY3cNblzg=", "success": true, - "projectFilePath": "/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", + "projectFilePath": "/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj", "expectedPackageFiles": [ - "/Users/averynorris/.nuget/packages/opentk/5.0.0-pre.15/opentk.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.audio/5.0.0-pre.15/opentk.audio.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.compute/5.0.0-pre.15/opentk.compute.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.core/5.0.0-pre.15/opentk.core.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.graphics/5.0.0-pre.15/opentk.graphics.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.input/5.0.0-pre.15/opentk.input.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.mathematics/5.0.0-pre.15/opentk.mathematics.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.platform/5.0.0-pre.15/opentk.platform.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.redist.glfw/3.4.0.44/opentk.redist.glfw.3.4.0.44.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.windowing.common/5.0.0-pre.15/opentk.windowing.common.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.windowing.desktop/5.0.0-pre.15/opentk.windowing.desktop.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/opentk.windowing.graphicslibraryframework/5.0.0-pre.15/opentk.windowing.graphicslibraryframework.5.0.0-pre.15.nupkg.sha512", - "/Users/averynorris/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", - "/Users/averynorris/.nuget/packages/microsoft.netcore.app.ref/8.0.23/microsoft.netcore.app.ref.8.0.23.nupkg.sha512", - "/Users/averynorris/.nuget/packages/microsoft.aspnetcore.app.ref/8.0.23/microsoft.aspnetcore.app.ref.8.0.23.nupkg.sha512" + "/home/avery/.nuget/packages/opentk/5.0.0-pre.15/opentk.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.audio/5.0.0-pre.15/opentk.audio.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.compute/5.0.0-pre.15/opentk.compute.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.core/5.0.0-pre.15/opentk.core.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.graphics/5.0.0-pre.15/opentk.graphics.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.input/5.0.0-pre.15/opentk.input.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.mathematics/5.0.0-pre.15/opentk.mathematics.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.platform/5.0.0-pre.15/opentk.platform.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.redist.glfw/3.4.0.44/opentk.redist.glfw.3.4.0.44.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.common/5.0.0-pre.15/opentk.windowing.common.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.desktop/5.0.0-pre.15/opentk.windowing.desktop.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.graphicslibraryframework/5.0.0-pre.15/opentk.windowing.graphicslibraryframework.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512", + "/home/avery/.nuget/packages/microsoft.netcore.app.ref/8.0.24/microsoft.netcore.app.ref.8.0.24.nupkg.sha512", + "/home/avery/.nuget/packages/microsoft.aspnetcore.app.ref/8.0.24/microsoft.aspnetcore.app.ref.8.0.24.nupkg.sha512" ], "logs": [] } \ No newline at end of file diff --git a/AwperativeKernel/obj/project.packagespec.json b/AwperativeKernel/obj/project.packagespec.json index 0a76f1a..b42190b 100644 --- a/AwperativeKernel/obj/project.packagespec.json +++ b/AwperativeKernel/obj/project.packagespec.json @@ -1 +1 @@ -"restore":{"projectUniqueName":"/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj","projectName":"AwperativeKernel","projectPath":"/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj","outputPath":"/Users/averynorris/RiderProjects/AwperativeKernel/AwperativeKernel/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"10.0.100"}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"OpenTK":{"target":"Package","version":"[5.0.0-pre.15, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[8.0.23, 8.0.23]"},{"name":"Microsoft.NETCore.App.Ref","version":"[8.0.23, 8.0.23]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file +"restore":{"projectUniqueName":"/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj","projectName":"AwperativeKernel","projectPath":"/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/AwperativeKernel.csproj","outputPath":"/home/avery/Projects/Awperative/AwperativeKernel/AwperativeKernel/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.300"}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"OpenTK":{"target":"Package","version":"[5.0.0-pre.15, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[8.0.24, 8.0.24]"},{"name":"Microsoft.NETCore.App.Ref","version":"[8.0.24, 8.0.24]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/AwperativeKernel/obj/rider.project.model.nuget.info b/AwperativeKernel/obj/rider.project.model.nuget.info index f9b028f..a14e091 100644 --- a/AwperativeKernel/obj/rider.project.model.nuget.info +++ b/AwperativeKernel/obj/rider.project.model.nuget.info @@ -1 +1 @@ -17722910163812180 \ No newline at end of file +17722975223225869 \ No newline at end of file diff --git a/AwperativeKernel/obj/rider.project.restore.info b/AwperativeKernel/obj/rider.project.restore.info index 1212d84..88febf5 100644 --- a/AwperativeKernel/obj/rider.project.restore.info +++ b/AwperativeKernel/obj/rider.project.restore.info @@ -1 +1 @@ -17722910991366692 \ No newline at end of file +17722975227348769 \ No newline at end of file