diff --git a/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs index 9329fb9..d220e4f 100644 --- a/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs +++ b/AwperativeKernel/Kernel/Atrributes/DebugAttributes.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace AwperativeKernel; @@ -181,39 +182,39 @@ public static class DebugAttributes } } - #endregion - - #region Null/Collection - - /// Requires all elements in a Collection are not null + /// Requires that a given Scene is not null [AttributeUsage(AttributeTargets.All)] - public class CollectionNotNull : Attribute + public class SceneDoesNotExist : Attribute { /// - public static bool VerifyOrThrow(ICollection __collection) { - foreach (object obj in __collection) { - if (obj == null) { - Awperative.Debug.LogError("A given enumerator has null members!", ["Type"], [__collection.GetType().Name]); - return Awperative.Debug.IgnoreErrors; - } - } + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public static bool VerifyOrThrow(Scene __scene) { + if (Awperative._scenes.Contains(__scene)) return true; - return true; + Awperative.Debug.LogError("Scene already exists!"); + + return Awperative.Debug.IgnoreErrors; } } + + #endregion + + #region Null/Collection /// Requires all elements in an Enumerator are not null [AttributeUsage(AttributeTargets.All)] - public class EnumeratorNotNull : Attribute + public class EnumerableNotNull : Attribute { /// public static bool VerifyOrThrow(IEnumerable __enumerator) { + if (__enumerator == null) { Awperative.Debug.LogError("A given enumerator is null!"); return Awperative.Debug.IgnoreErrors; } + foreach (object obj in __enumerator) { if (obj == null) { Awperative.Debug.LogError("A given enumerator has null members!", ["Type"], [__enumerator.GetType().Name]); @@ -224,6 +225,42 @@ public static class DebugAttributes return true; } } + + + + /// Requires that the enumerator contains a certain element. + [AttributeUsage(AttributeTargets.All)] + public class EnumerableContains : Attribute + { + + + /// + public static bool VerifyOrThrow(IEnumerable __enumerator, object __object) { + if (__enumerator.Contains(__object)) return true; + + Awperative.Debug.LogError("A given enumerator does not contains an object!", ["EnumeratorType", "ObjectType", "Value"], [__enumerator.GetType().Name, __object.GetType().Name, __object.ToString()]); + + return Awperative.Debug.IgnoreErrors; + } + } + + + + /// Requires that the enumerator does not contain a certain element. + [AttributeUsage(AttributeTargets.All)] + public class EnumerableDoesntContain : Attribute + { + + + /// + public static bool VerifyOrThrow(IEnumerable __enumerator, object __object) { + if (!__enumerator.Contains(__object)) return true; + + Awperative.Debug.LogError("A given enumerator already contains the object object!", ["EnumeratorType", "ObjectType", "Value"], [__enumerator.GetType().Name, __object.GetType().Name, __object.ToString()]); + + return Awperative.Debug.IgnoreErrors; + } + } @@ -260,42 +297,6 @@ public static class DebugAttributes return Awperative.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; - - Awperative.Debug.LogError("Collection does not contain object!", ["ObjectType"], [__object.GetType().Name]); - - return Awperative.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; - - Awperative.Debug.LogError("Collection already contains object!", ["ObjectType"], [__object.GetType().Name]); - - return Awperative.Debug.IgnoreErrors; - } - } #endregion } \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs b/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs new file mode 100644 index 0000000..9c5f4c7 --- /dev/null +++ b/AwperativeKernel/Kernel/Atrributes/DependencyAttributes.cs @@ -0,0 +1,28 @@ +using System; + + +namespace AwperativeKernel; + + +internal static class DependencyAttributes +{ + + + + /// Shows the source for a given module interface + [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Property)] + public class RequiredModule : Attribute + { + /// Where to assign in the Awperative class. + public string Source { get; set; } + + public RequiredModule() {} + + public RequiredModule(string Source) { + this.Source = Source; + } + } + + + +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Component/Component.cs b/AwperativeKernel/Kernel/Component/Component.cs index 521e398..ff0334b 100644 --- a/AwperativeKernel/Kernel/Component/Component.cs +++ b/AwperativeKernel/Kernel/Component/Component.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Awperative.Kernel.Overhead.Reflection; namespace AwperativeKernel; @@ -59,16 +60,16 @@ public abstract partial class Component : ComponentDocker /// Attempts to send an event to the component, and quietly exits if not. [MarkerAttributes.UnsafeInternal] internal void TryEvent(int __timeEvent) { - Awperative._TypeAssociatedTimeEvents[GetType()][__timeEvent]?.Invoke(this); + EventManager._TypeAssociatedTimeEvents[GetType()][__timeEvent]?.Invoke(this); } /// Adds a new tag to the component [MarkerAttributes.CalculatedProperty, MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void AddTag([DebugAttributes.NotNull, DebugAttributes.CollectionDoesntContain] string __tag) { + public void AddTag([DebugAttributes.NotNull, DebugAttributes.EnumerableDoesntContain] string __tag) { if(!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; - if(!DebugAttributes.CollectionDoesntContain.VerifyOrThrow(__tag, _tags)) return; + if(!DebugAttributes.EnumerableDoesntContain.VerifyOrThrow(_tags, __tag)) return; _tags.Add(__tag); ComponentDocker.HashTaggedComponent(__tag, this); @@ -80,9 +81,9 @@ public abstract partial class Component : ComponentDocker /// Removes a tag from the component. [MarkerAttributes.CalculatedProperty, MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void RemoveTag([DebugAttributes.NotNull,DebugAttributes.CollectionContains] string __tag) { + public void RemoveTag([DebugAttributes.NotNull,DebugAttributes.EnumerableContains] string __tag) { if (!DebugAttributes.NotNull.VerifyOrThrow(__tag)) return; - if(!DebugAttributes.CollectionContains.VerifyOrThrow(__tag, _tags)) return; + if(!DebugAttributes.EnumerableContains.VerifyOrThrow(_tags, __tag)) return; _tags.Remove(__tag); ComponentDocker.UnhashTaggedComponent(__tag, this); diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs index 5783494..e025b24 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerExposure.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Linq; @@ -24,19 +25,25 @@ public abstract partial class ComponentDocker /// Tells you whether the docker contains a component with all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool Contains(IEnumerable __tags) => GetAll(__tags).Any(); + public bool Contains([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => GetAll(__tags).Any(); /// Tells you whether the docker contains a component with all the given tags and the type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool Contains<__Type>(IEnumerable __tags) where __Type : Component => GetAll<__Type>(__tags).Any(); + public bool Contains<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component => GetAll<__Type>(__tags).Any(); /// Tells you whether the docker contains the given component. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] public bool Contains([DebugAttributes.ComponentNotNull] Component __component) => DebugAttributes.NotNull.VerifyOrThrow(__component) && _componentTypeDictionary.TryGetValue(__component.GetType(), out var components) && components.Contains(__component); + + /// Tells you whether the docker contains the all the given components. + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] + public bool ContainsAll([DebugAttributes.EnumerableNotNull] IEnumerable __components) => __components.All(x => _components.Contains(x)); - - + + /// Gets all components of a given type + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public IEnumerable GetAll() => _components; /// Finds the first component with a given Type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -50,7 +57,7 @@ public abstract partial class ComponentDocker /// Gets all components of a given type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public IEnumerable<__Type> GetAll<__Type>() where __Type : Component => _componentTypeDictionary.TryGetValue(typeof(__Type), out var components) ? components.OfType<__Type>().ToList() : []; + public IEnumerable<__Type> GetAll<__Type>() where __Type : Component => _componentTypeDictionary.TryGetValue(typeof(__Type), out HashSet components) ? components.OfType<__Type>().ToList() : []; /// Tries to get all components of a given type and returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -60,10 +67,10 @@ public abstract partial class ComponentDocker /// Finds all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable GetAll(IEnumerable __tags) { + public IEnumerable GetAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags) { + if (!DebugAttributes.EnumerableNotNull.VerifyOrThrow(__tags)) return []; HashSet components; - if (_componentTagDictionary.TryGetValue(__tags.First(), out var firstComponents)) components = firstComponents; else return []; foreach(var tag in __tags) @@ -75,7 +82,7 @@ public abstract partial class ComponentDocker /// Tries to find all components that have all the given tags, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll(IEnumerable __tags, out IEnumerable __components) + public bool TryGetAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out IEnumerable __components) { __components = GetAll(__tags); return __components.Any(); } @@ -84,7 +91,7 @@ public abstract partial class ComponentDocker /// Finds all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable<__Type> GetAll<__Type>(IEnumerable __tags) where __Type : Component { + public IEnumerable<__Type> GetAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component { if (!__tags.Any()) return []; @@ -103,9 +110,8 @@ public abstract partial class ComponentDocker /// Tries to find all the components that have the given tags and type, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll<__Type>(IEnumerable __tags, out IEnumerable<__Type> __components) where __Type : Component { - __components = GetAll<__Type>(__tags); return __components.Any(); - } + public bool TryGetAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out IEnumerable<__Type> __components) where __Type : Component + { __components = GetAll<__Type>(__tags); return __components.Any(); } @@ -117,47 +123,47 @@ public abstract partial class ComponentDocker /// Tries to get all the components with the given tag, returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool TryGetAll(string __tag, out IEnumerable __components) { __components = GetAll(__tag); return __components.Any(); } + public bool TryGetAll([DebugAttributes.NotNull] string __tag, out IEnumerable __components) { __components = GetAll(__tag); return __components.Any(); } /// Gets all the components that have a certain type, and a certain tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public IEnumerable<__Type> GetAll<__Type>(string __tag) where __Type : Component => GetAll<__Type>([__tag]); + public IEnumerable<__Type> GetAll<__Type>([DebugAttributes.NotNull] string __tag) where __Type : Component => GetAll<__Type>([__tag]); /// Tries to get all the components with a certain tag, and a type. Returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGetAll<__Type>(string __tag, out IEnumerable<__Type> __components) where __Type : Component { __components = GetAll<__Type>(__tag); return __components.Any(); } + public bool TryGetAll<__Type>([DebugAttributes.NotNull] string __tag, out IEnumerable<__Type> __components) where __Type : Component { __components = GetAll<__Type>(__tag); return __components.Any(); } /// Gets the first component with all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public Component Get(IEnumerable __tags) => GetAll(__tags).FirstOrDefault(); + public Component Get([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => GetAll(__tags).FirstOrDefault(); /// Tries to get the first component with all the given tags. Returns false if there are none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGet(IEnumerable __tags, out Component __component) { __component = Get(__tags); return __component != null; } + public bool TryGet([DebugAttributes.EnumerableNotNull] IEnumerable __tags, out Component __component) { __component = Get(__tags); return __component != null; } /// Finds the first component with the given tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public Component Get(string __tag) => GetAll([__tag]).FirstOrDefault(); + public Component Get([DebugAttributes.NotNull] string __tag) => GetAll([__tag]).FirstOrDefault(); /// Tries to find the first component with the given tag, returns false if there is none [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public bool TryGet(string __tag, out Component __component) { __component = Get(__tag); return __component != null; } + public bool TryGet([DebugAttributes.NotNull] string __tag, out Component __component) { __component = Get(__tag); return __component != null; } /// Gets the first component with the given type and tag [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public __Type Get<__Type>(string __tag) where __Type : Component => GetAll<__Type>(__tag).FirstOrDefault(); + public __Type Get<__Type>([DebugAttributes.NotNull] string __tag) where __Type : Component => GetAll<__Type>(__tag).FirstOrDefault(); /// Tries to get the first component with the given type and tag, returns false if there is none. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public bool TryGet<__Type>(string __tag, out __Type __component) where __Type : Component { __component = Get<__Type>(__tag); return __component != null; } + public bool TryGet<__Type>([DebugAttributes.NotNull] string __tag, out __Type __component) where __Type : Component { __component = Get<__Type>(__tag); return __component != null; } diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs index 1a50caf..04a976f 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMovement.cs @@ -25,8 +25,8 @@ public abstract partial class ComponentDocker /// Moves all components in a list to another docker - public void MoveAll([DebugAttributes.EnumeratorNotNull, DebugAttributes.DockerOwns] IEnumerable __Components, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) { - if(!DebugAttributes.EnumeratorNotNull.VerifyOrThrow(__Components)) return; + public void MoveAll([DebugAttributes.EnumerableNotNull, DebugAttributes.DockerOwns] IEnumerable __Components, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) { + if(!DebugAttributes.EnumerableNotNull.VerifyOrThrow(__Components)) return; if(!DebugAttributes.DockerNotNull.VerifyOrThrow(__componentDocker)) return; if(!DebugAttributes.DifferentDocker.VerifyOrThrow(this, __componentDocker)) return; @@ -35,6 +35,10 @@ public abstract partial class ComponentDocker Move(Component, __componentDocker); } } + + /// Gets all components of a given type + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] + public void MoveAll([DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(), __componentDocker); /// Moves the first component with a given Type [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] @@ -50,14 +54,14 @@ public abstract partial class ComponentDocker /// Moves all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void MoveAll([DebugAttributes.EnumeratorNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(__tags), __componentDocker); + public void MoveAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) => MoveAll(GetAll(__tags), __componentDocker); /// Moves all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.VeryLow), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void MoveAll<__Type>([DebugAttributes.EnumeratorNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(__tags), __componentDocker); + public void MoveAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags, [DebugAttributes.DockerNotNull, DebugAttributes.DifferentDocker] ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(__tags), __componentDocker); diff --git a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs index 194bbb3..d404836 100644 --- a/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs +++ b/AwperativeKernel/Kernel/ComponentDocker/ComponentDockerMutation.cs @@ -75,9 +75,15 @@ public abstract partial class ComponentDocker + /// Destroys all the components in a given list + [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] + public void DestroyAll() => DestroyAll(GetAll()); + + + /// Destroys all the components in a given list [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll([DebugAttributes.EnumeratorNotNull, DebugAttributes.DockerOwns] IEnumerable __Components) { foreach (Component component in __Components) Destroy(component); } + public void DestroyAll([DebugAttributes.EnumerableNotNull, DebugAttributes.DockerOwns] IEnumerable __Components) { foreach (Component component in __Components.ToArray()) Destroy(component); } @@ -95,14 +101,14 @@ public abstract partial class ComponentDocker /// Destroys all components that have all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll([DebugAttributes.EnumeratorNotNull] IEnumerable __tags) => DestroyAll(GetAll(__tags)); + public void DestroyAll([DebugAttributes.EnumerableNotNull] IEnumerable __tags) => DestroyAll(GetAll(__tags)); /// Destroys all Components that have the given type, and all the given tags [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public void DestroyAll<__Type>([DebugAttributes.EnumeratorNotNull] IEnumerable __tags) where __Type : Component => DestroyAll(GetAll<__Type>(__tags)); + public void DestroyAll<__Type>([DebugAttributes.EnumerableNotNull] IEnumerable __tags) where __Type : Component => DestroyAll(GetAll<__Type>(__tags)); diff --git a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs index c1c4e68..92df3bc 100644 --- a/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs +++ b/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs @@ -5,6 +5,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Linq.Expressions; using System.Reflection; +using Awperative.Kernel.Overhead.Reflection; namespace AwperativeKernel; @@ -42,41 +43,40 @@ public static partial class Awperative /// Awperative's debugger of choice, found from the module manager. - [MarkerAttributes.UnsafeInternal] - public static IDebugger Debug { get; set; } - /// Awperative's module manager of choice, sent in through the Start() function - [MarkerAttributes.UnsafeInternal] - public static IModuleManager ModuleManager { get; private set; } + [MarkerAttributes.UnsafeInternal, DependencyAttributes.RequiredModule] + public static IDebugger Debug { get; internal set; } /// Creates a new Scene with the given name [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - public static Scene CreateScene(string __name) { - if (!ContainsScene(__name)) { - Scene newScene = new Scene(__name); - _scenes.Add(newScene); - return newScene; - } else Debug.LogError("Awperative already has a Scene with that name!", ["Scene", "Name"], [GetScene(__name).GetHashCode().ToString(), __name]); return null; + public static Scene CreateScene([DebugAttributes.NotNull, DebugAttributes.SceneDoesNotExist] string __name) { + if (!DebugAttributes.NotNull.VerifyOrThrow(__name)) return null; + if (!DebugAttributes.SceneDoesNotExist.VerifyOrThrow(GetScene(__name))) return null; + + Scene newScene = new Scene(__name); + _scenes.Add(newScene); + return newScene; } [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Low), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.O1)] - 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; + public static void AddScene([DebugAttributes.SceneNotNull, DebugAttributes.SceneDoesNotExist] Scene __scene) { + if (!DebugAttributes.SceneNotNull.VerifyOrThrow(__scene)) return; + if (!DebugAttributes.SceneDoesNotExist.VerifyOrThrow(__scene)) return; + + _scenes.Add(__scene); } - - + + /// Finds a Scene from a given name [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] - public static Scene GetScene(string __name) => _scenes.FirstOrDefault(scene => scene.Name == __name, null); - - - + public static Scene GetScene([DebugAttributes.NotNull] string __name) => !DebugAttributes.NotNull.VerifyOrThrow(__name) ? null : _scenes.FirstOrDefault(scene => scene.Name == __name, null); + + + /// Returns bool based on whether there a scene with the given name or not. [MarkerAttributes.Expense(MarkerAttributes.Expense.ExpenseLevel.Medium), MarkerAttributes.Complexity(MarkerAttributes.Complexity.TimeComplexity.ON)] public static bool ContainsScene(string __name) => _scenes.Any(scene => scene.Name == __name); @@ -102,65 +102,8 @@ public static partial class Awperative if (IsStarted) return; IsStarted = true; - //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. - 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]; - - byte eventProfile = 0; - List debugProfile = []; - - for (int i = 0; i < ComponentEvents.Count; i++) { - MethodInfo eventMethod = type.GetMethod(ComponentEvents[i]); - - 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); - } - - 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."); - } - } - } - } + ReflectionManager.ResolveModules(AppDomain.CurrentDomain.GetAssemblies()); - if (Debug == null) - throw new Exception("Awperative doesn't have a Debugger!"); - - Debug.Start(); - Debug.LogAction("Successfully Compiled Classes!"); } @@ -202,17 +145,13 @@ public static partial class Awperative scene.ChainEvent(3); } } - - - internal static ReadOnlyCollection ComponentEvents = new(["Load", "Unload", "Update", "Draw", "Create", "Remove"]); - + /// /// List of all type of components and the associated time events /// Each event is a 0 or 1 based on true or false, stored at their index in the byte /// - internal static Dictionary[]> _TypeAssociatedTimeEvents = []; //What to do if there is an error, keep in mind low and none still can have errors, because you are turning off validation checking diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs new file mode 100644 index 0000000..fa994c3 --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/DependencyManager.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class DependencyManager +{ + + /// Resolves any needed Awperative dependencies! Given the Type, it searches recursively for all interfaces. If any of the interfaces + /// Has the RequiredModule() attribute, or one of the interfaces in required modules. It will assign it to the assosiated field in the Awperative class. + [MarkerAttributes.UnsafeInternal] + internal static void ResolveDependency(Type __type) { + + Console.WriteLine(__type.FullName); + + foreach (Type typeInterface in __type.GetInterfaces()) { + //Console.WriteLine(" " + typeInterface.FullName); + object[] dependencyInfo = typeInterface.GetCustomAttributes(typeof(DependencyAttribute), true); + + if (dependencyInfo.Length == 0) continue; + + foreach (object attribute in dependencyInfo) { + if (attribute is not DependencyAttributes.RequiredModule moduleAttribute) continue; + + PropertyInfo data = typeof(AwperativeKernel.Awperative).GetProperty(moduleAttribute.Source, BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + if (data != null) data.SetValue(null, Activator.CreateInstance(__type)); + } + } + } + + /// Checks all dependency marked variables in Awperative, and ensures that all are present! + [MarkerAttributes.UnsafeInternal] + internal static void ResolveFulfillment() { + + foreach (PropertyInfo propertyInfo in typeof(AwperativeKernel.Awperative).GetProperties(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)) { + object[] attributes = propertyInfo.GetCustomAttributes(typeof(DependencyAttribute), true); + + if (attributes.Length == 0) continue; + + IModule module = propertyInfo.GetValue(null) as IModule; + + if (module == null) throw new Exception("Failed to find dependency! " + propertyInfo.Name); + + ReflectionManager._modules.Add(module); + module.Start(); + } + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs new file mode 100644 index 0000000..d187158 --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/EventManager.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class EventManager +{ + /// Holds an associated action for each component and a time event. Is built with CompileType() during Start(). + [MarkerAttributes.UnsafeInternal] + internal static Dictionary[]> _TypeAssociatedTimeEvents = []; + + + /// All types of time based events in Awperative. + internal static readonly ImmutableArray Events = ["Load", "Unload", "Update", "Draw", "Create", "Remove"]; + + + /// Compiles a single type, and stores its events in the dictionary. + [MarkerAttributes.UnsafeInternal] + internal static void CompileType(Type __type) { + if (!__type.IsSubclassOf(typeof(Component))) return; + + + List> timeEvents = []; + + foreach (MethodInfo eventMethod in Events.Select(__type.GetMethod)) { + if (eventMethod == null) { timeEvents.Add(null); continue; } + + ParameterExpression ComponentInstanceParameter = Expression.Parameter(typeof(Component), "__component"); + UnaryExpression Casting = Expression.Convert(ComponentInstanceParameter, __type); + MethodCallExpression Call = Expression.Call(Casting, eventMethod); + Expression> Lambda = Expression.Lambda>(Call, ComponentInstanceParameter); + timeEvents.Add(Lambda.Compile()); + } + + _TypeAssociatedTimeEvents.Add(__type, timeEvents.ToArray()); + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs b/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs new file mode 100644 index 0000000..9c9053a --- /dev/null +++ b/AwperativeKernel/Kernel/Overhead/Reflection/ReflectionManager.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using AwperativeKernel; + + +namespace Awperative.Kernel.Overhead.Reflection; + + +internal static class ReflectionManager +{ + + /// List of all modules in Awperative + [MarkerAttributes.UnsafeInternal] + internal static List _modules = []; + + /// Resolves all the modules from the calling assembly and module manager + [MarkerAttributes.UnsafeInternal] + internal static void ResolveModules(Assembly[] __assemblies) { + foreach (Assembly assembly in __assemblies) ResolveAssembly(assembly); + + DependencyManager.ResolveFulfillment(); + } + + /// Resolves all the types in an assembly. + [MarkerAttributes.UnsafeInternal] + internal static void ResolveAssembly(Assembly __assembly) { + foreach (Type type in __assembly.GetTypes()) { + DependencyManager.ResolveDependency(type); + EventManager.CompileType(type); + } + } +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs index 78669c6..1805754 100644 --- a/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs +++ b/AwperativeKernel/Kernel/RequiredModules/IDebugger.cs @@ -1,20 +1,14 @@ -using System; using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Reflection; namespace AwperativeKernel; -public interface IDebugger + +[DependencyAttributes.RequiredModule(Source: "Debug")] +public interface IDebugger : IModule { - - public void Start(); - public void Stop(); public void LogAction(string __message); public void LogAction(string __message, IEnumerable __values, IEnumerable __args); diff --git a/AwperativeKernel/Kernel/RequiredModules/IModule.cs b/AwperativeKernel/Kernel/RequiredModules/IModule.cs new file mode 100644 index 0000000..b7a7783 --- /dev/null +++ b/AwperativeKernel/Kernel/RequiredModules/IModule.cs @@ -0,0 +1,12 @@ +namespace AwperativeKernel; + + +public interface IModule +{ + + + public void Start(); + public void Stop(); + + +} \ No newline at end of file diff --git a/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs b/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs deleted file mode 100644 index b4683f7..0000000 --- a/AwperativeKernel/Kernel/RequiredModules/IModuleManager.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; - - -namespace AwperativeKernel; - - -public interface IModuleManager -{ - public IEnumerable 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 bbec80c..6c7d647 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+daff25af555790c4cc665d8158c8ec80cf2d5cf2")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+227e70219acaaa9bbd4981af01eb79aaf1d96e0e")] [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 84431c9..476eba4 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache @@ -1 +1 @@ -0205d8c69e5e58efd9ceec6d025aa71702700c3efb6b0341b64d64d2efcda724 +5f132d4abe29f474cced3dd72be32c95430c59618df6c594ae25e534fec8180c 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 8dcee15..3412d35 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache and b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.assets.cache differ diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache index 2b06060..2072822 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache and b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache differ diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.CoreCompileInputs.cache b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.CoreCompileInputs.cache index d4a5a71..025b8ab 100644 --- a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.CoreCompileInputs.cache +++ b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -5635b864dfc1ecaa0f2c52b65d178dd300857fd622e8afa48acfcadbd77f72d1 +33413ce2ba51fbf0a7062dcd01f5b1a867dc2f45dcea968b5bdf25fdfd4515ac diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.dll b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.dll index 84430ca..6be7dbc 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.dll and b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.dll differ diff --git a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb index 5104910..74bce2a 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb and b/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb differ diff --git a/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll b/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll index 8609238..d640c5e 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll and b/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll differ diff --git a/AwperativeKernel/obj/Debug/net8.0/refint/AwperativeKernel.dll b/AwperativeKernel/obj/Debug/net8.0/refint/AwperativeKernel.dll index 8609238..d640c5e 100644 Binary files a/AwperativeKernel/obj/Debug/net8.0/refint/AwperativeKernel.dll and b/AwperativeKernel/obj/Debug/net8.0/refint/AwperativeKernel.dll differ 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 6f3cc58..79973e2 100644 --- a/AwperativeKernel/obj/rider.project.model.nuget.info +++ b/AwperativeKernel/obj/rider.project.model.nuget.info @@ -1 +1 @@ -17724711122635060 \ No newline at end of file +17724794171898753 \ No newline at end of file diff --git a/AwperativeKernel/obj/rider.project.restore.info b/AwperativeKernel/obj/rider.project.restore.info index a1020ce..a594047 100644 --- a/AwperativeKernel/obj/rider.project.restore.info +++ b/AwperativeKernel/obj/rider.project.restore.info @@ -1 +1 @@ -17724711517868833 \ No newline at end of file +17724794196898973 \ No newline at end of file