Renamed To Kernel

This commit is contained in:
2026-02-16 18:00:08 -05:00
parent c81b942f2b
commit abbfe285b6
72 changed files with 230 additions and 29 deletions

View File

@@ -0,0 +1,30 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-mgcb-editor": {
"version": "3.8.4",
"commands": [
"mgcb-editor"
]
},
"dotnet-mgcb-editor-linux": {
"version": "3.8.4",
"commands": [
"mgcb-editor-linux"
]
},
"dotnet-mgcb-editor-windows": {
"version": "3.8.4",
"commands": [
"mgcb-editor-windows"
]
},
"dotnet-mgcb-editor-mac": {
"version": "3.8.4",
"commands": [
"mgcb-editor-mac"
]
}
}
}

View File

@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Library</OutputType>
<RootNamespace>Awperative</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.*">
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>

View File

View File

@@ -0,0 +1,197 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using Microsoft.Xna.Framework;
namespace Awperative;
public abstract partial class Component : ComponentDocker
{
/// <summary>
/// Current parent of the Component. Can be either Scene or another Component.
/// </summary>
public ComponentDocker ComponentDocker { get; internal set; }
/// <summary>
/// If the component receives time events or not.
/// </summary>
public bool Enabled = true;
/// <summary>
/// Order for when Components are called on. Only applies between Components on the same Docker.
/// </summary>
public int Priority {
get => _priority; set => ComponentDocker.UpdatePriority(this, value);
} internal int _priority;
/// <summary>
/// To be called when the Component is created.
/// </summary>
/// <param name="__parent"> Docker that this spawned in this Component</param>
internal void Initiate(ComponentDocker __parent) {
ComponentDocker = __parent;
Create();
}
/// <summary>
/// Called when the Game is Closing; does not always happen depending on if it is Force Closed.
/// </summary>
protected internal virtual void Unload() {}
/// <summary>
/// Called when the Game is Loading.
/// </summary>
protected internal virtual void Load() {}
/// <summary>
/// Called every frame before Draw, it is recommended to do any Non-Drawing update logic here.
/// </summary>
protected internal virtual void Update() {}
/// <summary>
/// Called after Update when the screen is being drawn. Please only put Drawing related logic here.
/// </summary>
protected internal virtual void Draw() {}
/// <summary>
/// Called when the Component is created.
/// </summary>
protected internal virtual void Create() {}
/// <summary>
/// Called when the Component is destroyed. Not called when the Game is closed.
/// </summary>
protected internal virtual void Destroy() {}
/// <summary>
/// Scene the Component resides in.
/// </summary>
public Scene Scene => __QueryScene();
protected Scene __QueryScene() {
if (ComponentDocker is Scene scene) return scene;
if (ComponentDocker is Component Component) return Component.__QueryScene();
return null;
}
/// <summary>
/// Identifiers for Components.
/// </summary>
public ImmutableArray<string> Tags => [.._tags];
internal HashSet<string> _tags = [];
/// <summary>
/// Adds a new tag to the Component
/// </summary>
/// <param name="__tag"> The tag to add</param>
public void AddTag(string __tag) => ComponentDocker.HashTaggedComponent(this, __tag);
/// <summary>
/// Removes a tag from the Component
/// </summary>
/// <param name="__tag"> The tag to remove</param>
public void RemoveTag(string __tag) => ComponentDocker.UnhashTaggedComponent(this, __tag);
/// <summary>
/// All parent Dockers and the parents of the parents up until the Scene. Will only list parents of parents, not uncle dockers.
/// </summary>
/// <remarks> Dockers[0] is the parent of this object, and Dockers[^1] is the Scene.</remarks>
public ImmutableArray<ComponentDocker> Dockers => __QueryDockers();
protected ImmutableArray<ComponentDocker> __QueryDockers() {
List<ComponentDocker> returnValue = [];
ComponentDocker currentComponentDocker = ComponentDocker;
while (!(currentComponentDocker is Scene)) {
if (currentComponentDocker is Component Component) {
returnValue.Add(currentComponentDocker);
currentComponentDocker = Component.ComponentDocker;
} else {
Debug.LogError("Component has a Parent that is not a Scene or Component, Please do not use the Docker class unless you know what you are doing!", ["Component", "Type", "Docker"],
[GetHashCode().ToString(), GetType().ToString(), ComponentDocker.GetHashCode().ToString()]);
}
}
returnValue.Add(currentComponentDocker);
return [..returnValue];
}
/// <summary>
/// Returns the Parent Component. Will be null if the Component is under a scene.
/// </summary>
public Component Parent => __QueryParent();
protected Component __QueryParent() {
if (ComponentDocker is Component Component)
return Component;
return null;
}
/// <summary>
/// All parent Components and the parents of the parents up until the Scene. Will only list parents of parents, not uncle Components.
/// </summary>
public ImmutableArray<Component> Parents => __QueryComponents();
protected ImmutableArray<Component> __QueryComponents() {
List<Component> returnValue = [];
ComponentDocker currentComponentDocker = ComponentDocker;
while (!(currentComponentDocker is Scene))
if (currentComponentDocker is Component Component) {
returnValue.Add(Component);
currentComponentDocker = Component.ComponentDocker;
}
return [..returnValue];
}
}

View File

@@ -0,0 +1,237 @@
# Awperative Components
### Code and Documentation by Avery Norris
---
Components are the main innovation in Awperative's take on a modern, unbiased
**ECS** [(Entity Component System)](https://en.wikipedia.org/wiki/Entity_component_system); traditionally,
an Entity Component system involves 2/3 types of data.
Parent Scene/World :
Children GameObjects/Actors :
Children Components/Scripts
- **Components** are what we actually care about, shockingly, they are the
"Component" in Entity Component System, and you can think about them as the actual
scripts or program in your Game, but a little more object-oriented.
- **GameObjects** are the parents components are glued to, in most Game Libraries and Engines
they are also treated as physical objects; and often given properties like **Transform** and **Tags**.
GameObjects can also commonly nest in each other. I find it useful *(Especially in Awperative)* to view
these as Directories for components.
- **Scenes** are basically the worlds these objects inhabit. Common *synonyms* are Worlds or Levels. If GameObjects
are files in our analogy, then scenes are separate hard drives. The scene's jobs mainly center around being a
Docker. *(Rather than an object of functionality)*
**Keep in mind** that this is a general description of **other** Game Development Platforms. It's impossible to summarize
every single **ECS** in the world.
## How Awperative Differs
As of this current version, Awperative's **ECS** has taken on a different form than most.
Parent Scene/World
Components :
Children Components
One of the main **Awperative Principles** is **Generalization**; and during development it became clear
GameObjects are unnecessary, which caused them to be replaced by: the **Component**.
While they are still called **Components**, Awperative's Components are actually a combination of the **GameObjects** and **Components** we discussed earlier. Awperative
does not implement many fancy features out of the box; because of that the traditionally useful GameObjects became
obsolete. Objects are also not built to be flexible like Components, leaving empty, nearly static objects floating in
our Scenes.
Because of this it was decided to make a more flexible type of entity that can act as GameObject and Component at once.
However, Components still do not implement many features out of the box, instead we use their **expandability** to our advantage.
## How To Use
Components are rather easy to control, similar to Engines like Unity, you can make your own custom script by inheriting the abstract "**Component**" class.
public class MyScript : Component {}
On the surface level, Components provide you with your current scene and parents.
They also give very handy Game Events which are present in 99% of Game Development Platforms.
public virtual void Load();
public virtual void Unload();
public virtual void Update();
public virtual void Draw();
public virtual void Create();
public virtual void Destroy();
- Load and Unload provides a call when the Game is opened and closed respectively, please be wary: these will not call under a force close.
- Update and Draw both trigger each frame, starting with Update. It is recommended to put your non-graphics related
code there; and vice versa for Draw.
- Finally Create and Destroy are called when the Component is spawned In/Out. It should be noted that Create is called **after** the constructor.
If you try to make certain references or calls in the constructor it may not fully work, as the object is half instantiated. It is recommended to use Create when possible. Also, Destroy will not be called if the program is closed, just Unload.
If you want to hook onto any of these methods it is quite simple using the override keyword.
public override void Update() {}
Putting this code inside any Component inheriting class, will create a method that gets called every single frame, just like that!
For any further documentation, please refer to the API section of our glorious website!
## Examples and Good Practice
First let's see how we can recreate typical GameObject Component. I would most recommend using **Nested Components** to achieve this.
If we pretend we have implemented a few modules for basic transform profiles and sprite management, then we can easily make a basic movable sprite object.
Like so :
Parent Scene/World
Empty Component :
Transform Component
Sprite Component
We can expand upon this easily as well. Say we want to make it into a moveable player character, we can modify the Empty Component to
carry some additional functionality.
Parent Scene/World
Player Controller Component : <--
Transform Component
Sprite Component
If we want to give it a hitbox.
Parent Scene/World
Player Controller Component :
Transform Component
Sprite Component
Hitbox Component <--
And maybe let's say we want to scale or offset that
Parent Scene/World
Player Controller Component :
Transform Component
Sprite Component
Hitbox Component
Transform Component <--
Of course, there is some additional programming that would be needed between each step.
**(Ex. Hitboxes listening to the child transform)**, but you can see how this data structure
builds intuitively.
I would recommend compartmentalizing any repeating pieces of code or types into a **Component**. It is also
not immediately obvious at first, But I would say one of the largest utilities from an **object free component** system is the ability
to function at a high level in the scene.
Often times in component-object **ECS**' you will have a static object/s that stores important one off Components, such as the *Camera*,
or the *Game's Asset Loader*. I've always found this to be unsatisfying. Luckily because Components can operate as standalone objects
you can instead insert a standalone Camera Component into the scene. Which makes more logical and grammatical sense.
Parent Scene/World
Camera
Asset Loader
## Under the Hood
As you've seen part of what makes **Components** so great is the fact that they can nest within themselves infinitely.
This is possible because of an essential piece known as the **Docker**.
Dockers are seen everywhere in Awperative. They are built to store child Components. The Component class carries a Docker like so.
Component : Docker
Dockers also provide the Add, Get and Remove functions we all know and love, along with the list of child Components.
It is also responsible for Awperative Events being passed through the Scene, for Example, an Update call would look like this
Scene -> Docker -> Component(Docker's child)
Update() -> ChainUpdate() -> Update()
Of course, the Update call would be redirected to a different spot if you were to override it, but the idea stays the same.
For more details, please look at Docker in the API and the file in Awperative!
## Specialized Components
Because of its focus on **Expandability**, Awperative also allows **third-party** Components to enter the Scene.
This allows for specialized Component or streamlined development, if you are willing to make assumptions.
Let's imagine you are making an enemy for an RPG and your Component Layout looks somewhat like this
Parent Scene/World
Enemy Pathfinding Component :
Transform Component
Sprite Component
Hitbox Component
Health Component
UNIQUE Component
In this diagram, **UNIQUE Component** is just a placeholder for any future or enemy specific Components, and it is critical to our example.
And let's imagine that any time you add an enemy, then you will probably be adding some sort of "UNIQUE Component" there; And this unique Component often
uses aspects from the others present.
In a scenario like this, it would likely behoove you to create a specialized Component type. As mentioned earlier, Components are identified by inheriting the
abstract Component class. But it is possible to build an in-between class for additional functionality.
- Traditional Pattern
Your Script : Component : Docker
- Example Specialized Pattern
Your Script : EnemyComponent : Component : Docker
As you can see we inherited through EnemyComponent rather than Component. This is perfectly legal; and intended!
You can do virtually anything in your specialized Component in-between. I most recommend making use of **lambda** in situations like this.
For instance, you can provide simpler access to another Component like so
int Health => Parent.Get<Health>().Health;
Any future EnemyComponents can simply put "**Health**" and it will correctly retrieve the dynamic value.
I should mention that this power comes with **great responsibility**. In this case: using EnemyComponent without a Health Component
will cause logged errors, and possibly a runtime error/halt.
---
---
# End Of Documentation
### Code and Documentation by Avery Norris

View File

@@ -0,0 +1,526 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
namespace Awperative;
/// <summary>
/// Base class for all Awperative Entities. 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.
/// </summary>
/// <remarks> Please don't inherit this. I don't know why you would</remarks>
/// <author> Avery Norris </author>
public abstract class ComponentDocker
{
/// <summary>
/// List of all Components belonging to the Docker, Please Use Add, Get, Move and Destroy to modify it.
/// </summary>
public ImmutableArray<Component> Components => [.._Components];
/// <summary>
/// Amount of all Components in the Docker
/// </summary>
public int Count => _Components.Count;
/// <summary>
/// Core of Docker, contains all of our precious Components. Sorts them by their priorities with highest going first.
/// If they are equal it defaults to hash codes to ensure consistent Behavior
/// </summary>
internal SortedSet<Component> _Components = new(_componentSorter);
/// <summary>
/// How Priority is sorted.
/// </summary>
private readonly static Comparer<Component> _componentSorter = Comparer<Component>.Create((a, b) => {
int result = b.Priority.CompareTo(a.Priority);
return (result != 0) ? result : a.GetHashCode().CompareTo(b.GetHashCode());
});
/// <summary>
/// Resorts member of Component list to match the Priority.
/// </summary>
/// <param name="__component"> Component to modify</param>
/// <param name="__priority"> New priority for Component</param>
internal void UpdatePriority(Component __component, int __priority) {
foreach (String tag in __component._tags) {
_taggedComponents[tag].Remove(__component);
} _Components.Remove(__component);
__component._priority = __priority;
foreach (String tag in __component._tags) {
_taggedComponents[tag].Add(__component);
} _Components.Add(__component);
}
/// <summary>
/// Called by Awperative when the game is Closed, sends the event to all children; and they send it to their children.
/// </summary>
/// <remarks> Will not always trigger if the program is force closed </remarks>
internal virtual void ChainUnload() { foreach (Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Unload(); component.ChainUnload(); } } }
/// <summary>
/// Called by Awperative when the game is Opened, sends the event to all children; and they send it to their children.
/// </summary>
internal virtual void ChainLoad() { foreach (Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Load(); component.ChainLoad(); } } }
/// <summary>
/// Called by Awperative when the game is Updated sends the event to all children; and they send it to their children.
/// </summary>
internal virtual void ChainUpdate() { foreach (Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Update(); component.ChainUpdate(); } } }
/// <summary>
/// Called by Awperative when the game is Drawn, sends the event to all children; and they send it to their children.
/// </summary>
/// <remarks> Only use this method for drawing methods</remarks>
internal virtual void ChainDraw() { foreach (Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Draw(); component.ChainDraw(); } } }
/// <summary>
/// Called by Awperative when this is Created, sends the event to all children; and they send it to their children.
/// </summary>
internal virtual void ChainCreate() { foreach (Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Create(); component.ChainCreate(); } } }
/// <summary>
/// Called by Awperative when this Component is destroyed, sends the event to all children; since they will be Destroyed too. And they send it to their children.
/// </summary>
/// <remarks> Not called when the game is closed</remarks>
internal virtual void ChainDestroy() { foreach(Component component in (Component[])[.._Components]) { if(component.Enabled) { component.Destroy(); component.ChainDestroy(); } } }
/// <summary>
/// Add a new Component to the Docker; This is the only way they should be created.
/// </summary>
/// <param name="__args"> Arguments to construct the Component with</param>
/// <typeparam name="__Type"> Type of Component to instantiate</typeparam>
/// <returns></returns>
public __Type Add<__Type>(object[] __args) where __Type : Component {
//Component does not have a constructor that matches the given args
if (typeof(__Type).GetConstructor(__args.Select(x => x.GetType()).ToArray()) == null) {
Debug.LogError("Component cannot be constructed with the given arguments",
["Type", "Args"],
[typeof(__Type).ToString(), "[" + string.Join(", ", __args.Select(x => x.ToString())) + "]"]); return null;
};
Component newComponent;
//Tries to instantiate Component, and sends a fail call if an issue occurs.
try { newComponent = (__Type)Activator.CreateInstance(typeof(__Type), __args); }
catch {
Debug.LogError("Component creation failed!", ["Type", "Args", "Docker"],
[typeof(__Type).ToString(), "[" + string.Join(", ", __args.Select(x => x.ToString())) + "]", GetHashCode().ToString()]); return null;
}
//If Component is null do not add
if(newComponent == null) {
Debug.LogError("Activator created Null Component", ["Type", "Args", "Docker"],
[typeof(__Type).ToString(), "[" + string.Join(", ", __args.Select(x => x.ToString())) + "]", GetHashCode().ToString()]); return null;
}
//Add to docker and initialize the new Component
_Components.Add(newComponent);
newComponent.Initiate(this);
return (__Type) newComponent;
}
/// <summary>
/// Adds a new Component to the Docker; This is the only way they should be created.
/// </summary>
/// <typeparam name="__Type"></typeparam>
/// <returns></returns>
public __Type Add<__Type>() where __Type : Component => Add<__Type>([]);
/// <summary>
/// Transfers a child Component to another Docker
/// </summary>
/// <param name="__component"> Component to move</param>
/// <param name="__componentDocker"> Docker to move component to</param>
/// <remarks> Components cannot transfer themselves with this Method!</remarks>
public void Move(Component __component, ComponentDocker __componentDocker) {
//This allows self transfer behavior while preserving Docker's actual job, Before all other statements to prevent Double-Debugging.
if (__component == this) { __component.ComponentDocker.Move(__component, __componentDocker); return; }
if (__component == null) {
Debug.LogError("Component is null!", ["CurrentDocker", "NewDocker"],
[GetHashCode().ToString(), __componentDocker.GetHashCode().ToString()]); return; }
if (!_Components.Contains(__component)) {
Debug.LogError("Docker does not have ownership of Component", ["Component", "Type", "CurrentDocker", "NewDocker"],
[__component.GetHashCode().ToString(), __component.GetType().ToString(), GetHashCode().ToString(), __componentDocker.GetHashCode().ToString()]); return; }
//Update docker lists
__componentDocker._Components.Add(__component);
_Components.Remove(__component);
//Update components parent
__component.ComponentDocker = __componentDocker;
}
/// <summary>
/// Transfers the first found Component of a specific type to another Docker
/// </summary>
/// <param name="__componentDocker"> Docker to move component to</param>
/// <typeparam name="__Type"> Type of component</typeparam>
public void Move<__Type>(ComponentDocker __componentDocker) where __Type : Component => Move(Get<__Type>(), __componentDocker);
/// <summary>
/// Transfers all Components in a list to another Docker.
/// </summary>
/// <param name="__Components"> List of Components to transfer</param>
/// <param name="__componentDocker"> Docker to move Component to</param>
public void MoveAll(IEnumerable<Component> __Components, ComponentDocker __componentDocker) { foreach (Component Component in (Component[])[..__Components]) Move(Component, __componentDocker); }
/// <summary>
/// Transfers all Components of a type to another Docker.
/// </summary>
/// <param name="__componentDocker"> Target Docker</param>
/// <typeparam name="__Type"> Type of Components to transfer</typeparam>
public void MoveAll<__Type>(ComponentDocker __componentDocker) where __Type : Component => MoveAll(GetAll<__Type>(), __componentDocker);
/// /// <summary>
/// Holds Components at Keys of their tags.
/// </summary>
internal Dictionary<string, SortedSet<Component>> _taggedComponents = [];
/// <summary>
/// Add component to its proper place in the dictionary and resort values to match priorities.
/// </summary>
/// <param name="__component"> Component to hash</param>
/// <param name="__tag"> Value to try and hash</param>
internal void HashTaggedComponent(Component __component, string __tag) {
if (!__component._tags.Add(__tag)) {
Debug.LogError("Component already has tag!", ["Component", "Type", "Tag", "Docker"],
[__component.GetHashCode().ToString(), __component.GetType().ToString(), __tag, GetHashCode().ToString()]); return;
}
if (_taggedComponents.TryGetValue(__tag, out SortedSet<Component> components)) {
components.Add(__component);
} else { _taggedComponents.Add(__tag, new SortedSet<Component>(_componentSorter)); _taggedComponents[__tag].Add(__component); }
}
/// <summary>
///
/// </summary>
/// <param name="__component"></param>
/// <param name="__tag"></param>
internal void UnhashTaggedComponent(Component __component, string __tag) {
if (!__component._tags.Remove(__tag)) {
Debug.LogError("Component already doesn't have that tag!", ["Component", "Type", "Tag", "Docker"],
[__component.GetHashCode().ToString(), __component.GetType().ToString(), __tag, GetHashCode().ToString()]); return;
}
if (_taggedComponents.TryGetValue(__tag, out SortedSet<Component> components)) {
components.Remove(__component);
if(components.Count == 0)
_taggedComponents.Remove(__tag);
}
}
/// <summary>
/// Finds the first instance of a component with a given tag
/// </summary>
/// <param name="__tag"></param>
/// <returns></returns>
internal Component Get(string __tag) {
if (_taggedComponents.TryGetValue(__tag, out SortedSet<Component> components))
return ((Component[])[..components])[0];
return null;
}
/// <summary>
/// Finds all Components with a given tag
/// </summary>
/// <param name="__tag"></param>
/// <returns></returns>
internal ImmutableArray<Component> GetAll(string __tag) {
if (_taggedComponents.TryGetValue(__tag, out SortedSet<Component> components))
return [..components];
return [];
}
/// <summary>
/// Finds the first Component that has all the given tags
/// </summary>
/// <param name="__tags"></param>
/// <returns></returns>
internal Component Get(List<string> __tags) { ImmutableArray<Component> returnValue = GetAll(__tags); return returnValue.Length > 0 ? returnValue[0] : null; }
/// <summary>
/// Finds all Components that have all the given tags
/// </summary>
/// <param name="__tags"></param>
/// <returns></returns>
internal ImmutableArray<Component> GetAll(List<string> __tags) {
if (__tags.Count == 0)
return [];
SortedSet<Component> foundComponents = _taggedComponents[__tags[0]];
for (int i = 1; i < __tags.Count; i++) {
foreach (Component component in (Component[])[..foundComponents]) {
if (!_taggedComponents[__tags[i]].Contains(component)) foundComponents.Remove(component);
}
}
return [..foundComponents];
}
/// <summary>
/// Searches and returns the first Component of a type found on the Docker.
/// </summary>
/// <typeparam name="__Type"> The Type of Component to search for</typeparam>
/// <returns></returns>
public __Type Get<__Type>() where __Type : Component {
//Iterates through the loop and returns if a match is found
foreach (Component component in (Component[])[.._Components])
if (component is __Type foundComponent) return foundComponent;
//Throws error if there is no Component found
Debug.LogError("Docker does not have target Component", ["Type", "Docker"],
[typeof(__Type).ToString(), GetHashCode().ToString()]); return null;
}
/// <summary>
/// Searches and returns all Components of a type found on the Docker.
/// </summary>
/// <typeparam name="__Type"> The Type of Components to search for</typeparam>
/// <returns></returns>
public ImmutableArray<__Type> GetAll<__Type>() where __Type : Component {
List<__Type> foundComponents = [];
//Iterates through the loop and returns if a match is found
foreach (Component component in (Component[])[.._Components]) {
if (component is __Type foundComponent) {
foundComponents.Add(foundComponent);
}
}
//Throws error if there is no Component found
if (foundComponents.Count == 0) {
Debug.LogError("Docker does not have target Component", ["Type", "Docker"],
[typeof(__Type).ToString(), GetHashCode().ToString()]);
return [];
}
return [..foundComponents];
}
/// <summary>
/// Returns a bool based on if the Docker contains a Component with the given tag or not
/// </summary>
/// <param name="__tag"></param>
/// <returns></returns>
public bool Contains(string __tag) => _taggedComponents.ContainsKey(__tag);
/// <summary>
/// Returns a bool based on if the Docker contains a Component of that type or not
/// </summary>
/// <typeparam name="__Type">Type of the Component</typeparam>
/// <returns></returns>
public bool Contains<__Type>() where __Type : Component => _Components.Any(x => x is __Type);
/// <summary>
/// Returns a bool based on if the current __Component is owned by this Docker
/// </summary>
/// <param name="__component"></param>
/// <returns></returns>
public bool Contains(Component __component) => _Components.Contains(__component);
/// <summary>
/// Destroys a Component attached to docker
/// </summary>
/// <param name="__component"></param>
public void Remove(Component __component) {
//Component is null
if (__component == null) {
Debug.LogError("Component is null", ["CurrentDocker"],
[GetHashCode().ToString()]); return;
}
//Docker doesn't have Component
if (!_Components.Contains(__component)) {
Debug.LogError("Docker does not have ownership of Component", ["Component", "Type", "CurrentDocker"],
[__component.GetHashCode().ToString(), __component.GetType().ToString(), GetHashCode().ToString()]); return;
}
__component.Destroy();
__component.ChainDestroy();
foreach (string tag in __component._tags) UnhashTaggedComponent(__component, tag);
__component.ComponentDocker = null;
_Components.Remove(__component);
}
/// <summary>
/// Destroys the first found Component of a given type
/// </summary>
/// <typeparam name="__Type"> Type of Component to destroy</typeparam>
public void Remove<__Type>() where __Type : Component => Remove(Get<__Type>());
/// <summary>
/// Destroys all Components from a given collection.
/// </summary>
/// <param name="__Components"></param>
public void RemoveAll(IEnumerable<Component> __Components) { foreach (Component component in (Component[])[..__Components]) { Remove(component); } }
/// <summary>
/// Destroys all Components of a given type
/// </summary>
/// <typeparam name="__Type"></typeparam>
public void RemoveAll<__Type>() where __Type : Component => RemoveAll(GetAll<__Type>());
/// <summary>
/// Destroys all Components attached to Docker
/// </summary>
public void RemoveAll() { foreach (Component component in (Component[])[.._Components]) { Remove(component); } }
}

View File

@@ -0,0 +1,206 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Awperative;
public static class Debug
{
/// <summary>
/// True path of the log file Awperative dumps to.
/// </summary>
public static string LogFilePath { get; private set; }
public static string LogFileName { get; private set; } = "Log";
/// <summary>
/// Sets up the Awperative debugger and finds the log file.
/// </summary>
internal static void Initiate() {
string directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if(directoryPath == null) throw new Exception("Failed to get directory path!");
LogFilePath = Path.Join(directoryPath, LogFileName + ".awlf");
if(!Directory.GetFiles(directoryPath).Contains(LogFileName + ".awlf")) { File.Create(LogFilePath).Close(); }
}
/// <summary>
/// Writes the current message to the log file.
/// </summary>
/// <param name="__message"> Message to debug</param>
public static void LogAction(string __message) => LogGeneric(__message, "ACT", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogAction(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "ACT", __parameters, __values);
/// <summary>
/// Writes the current message to the log file if the condition is true.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
public static void AssertAction(bool __condition, string __message) => AssertGeneric(__condition, __message, "ACT", [], []);
/// <summary>
/// Writes the current message to the log file.
/// </summary>
/// <param name="__message"> Message to debug</param>
public static void LogState(string __message) => LogGeneric(__message, "STA", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogState(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "STA", __parameters, __values);
/// <summary>
/// Writes the current message to the log file if the condition is true.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
public static void AssertState(bool __condition, string __message) => AssertGeneric(__condition, __message, "STA", [], []);
/// <summary>
/// Writes the current message to the log file.
/// </summary>
/// <param name="__message"> Message to debug</param>
public static void LogValue(string __message) => LogGeneric(__message, "VAL", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogValue(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "VAL", __parameters, __values);
/// <summary>
/// Writes the current message to the log file if the condition is true.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
public static void AssertValue(bool __condition, string __message) => AssertGeneric(__condition, __message, "VAL", [], []);
/// <summary>
/// Writes the current message to the log file.
/// </summary>
/// <param name="__message"> Message to debug</param>
public static void LogWarning(string __message) => LogGeneric(__message, "WAR", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogWarning(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "WAR", __parameters, __values);
/// <summary>
/// Writes the current message to the log file if the condition is true.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
public static void AssertWarning(bool __condition, string __message) => AssertGeneric(__condition, __message, "WAR", [], []);
/// <summary>
/// Writes the current message to the log file.
/// </summary>
/// <param name="__message"> Message to debug</param>
public static void LogError(string __message) => LogGeneric(__message, "ERR", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogError(string __message, string[] __parameters, string[] __values) => LogGeneric(__message, "ERR", __parameters, __values);
/// <summary>
/// Writes the current message to the log file if the condition is true.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
public static void AssertError(bool __condition, string __message) => AssertGeneric(__condition, __message, "ERR", [], []);
/// <summary>
/// Writes the current message to the log file. With any given call sign.
/// </summary>
/// <param name="__message"> Message to debug</param>
/// <param name="__callSign"> Message identifier</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void LogGeneric(string __message, string __callSign, string[] __parameters, string[] __values) {
string output = "\n\n" + __callSign + "- \"" + __message + "\"\n STK-" + new StackTrace();
for (int i = 0; i < __parameters.Length || i < __values.Length; i++)
output += "\n " + __parameters[i] + "- " + __values[i];
File.AppendAllText(LogFilePath, output);
}
/// <summary>
/// Writes the current message to the log file if the condition is true. With any given call sign.
/// </summary>
/// <param name="__condition"> Condition to debug </param>
/// <param name="__message"> Message to debug</param>
/// <param name="__callSign"> Message identifier</param>
/// <param name="__parameters"> Names of values to debug</param>
/// <param name="__values"> Values to debug</param>
public static void AssertGeneric(bool __condition, string __message, string __callSign, string[] __parameters, string[] __values) {
if (!__condition) return;
string output = "\n\n" + __callSign + "- \"" + __message + "\"\n STK-" + new StackTrace();
for (int i = 0; i < __parameters.Length || i < __values.Length; i++)
output += "\n " + __parameters[i] + "- " + __values[i];
File.AppendAllText(LogFilePath, output);
}
}

View File

@@ -0,0 +1,5 @@
Awperative debugger writes errors to file while staying within runtime.
Searches for a file with any specifiable name in config. that must end in .awlf
stands for awperative logging format.

View File

@@ -0,0 +1,127 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.IO;
using System.Linq;
using System.Reflection;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace Awperative;
/// <summary>
/// Initiating class of Awperative. Call Start() to start the kernel.
/// </summary>
/// <author> Avery Norris </author>
public static class Awperative
{
/// <summary>
/// Bottom class of Awperative. Contains the MonoGame instance.
/// </summary>
public static Base Base { get; internal set; }
/// <summary>
/// Handles graphics settings through MonoGame.
/// </summary>
public static GraphicsDeviceManager GraphicsDeviceManager { get; internal set; }
/// <summary>
/// Handles drawing sprites to the screen through MonoGame.
/// </summary>
public static SpriteBatch SpriteBatch { get; internal set; }
/// <summary>
/// Handles loading content through MonoGame.
/// </summary>
public static ContentManager ContentManager { get; internal set; }
/// <summary>
/// List of all scenes currently loaded in the kernel.
/// </summary>
public static ImmutableArray<Scene> Scenes => [.._scenes];
internal static HashSet<Scene> _scenes { get; private set; } = [];
/// <summary>
/// Creates a new Scene
/// </summary>
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;
}
/// <summary>
/// Finds a Scene from a given name
/// </summary>
/// <param name="__name"> Name to search for</param>
/// <returns></returns>
public static Scene GetScene(string __name) => _scenes.FirstOrDefault(scene => scene.Name == __name, null);
/// <summary>
/// Returns bool based on whether there a scene with the given name or not.
/// </summary>
/// <param name="__name"></param>
/// <returns></returns>
public static bool ContainsScene(string __name) => _scenes.Any(scene => scene.Name == __name);
/// <summary>
/// Closes a Scene
/// </summary>
/// <param name="__scene"></param>
public static void CloseScene(Scene __scene) => Scenes.Remove(GetScene(__scene.Name));
/// <summary>
/// Gets Awperative ready to roll!
/// </summary>
/// <param name="__hooks"> List of all event hooks you wish to use. </param>
/// <remarks> You cannot add new hooks later; so make sure to register all of them in the Start() method.</remarks>
public static void Start() {
Debug.Initiate();
}
/// <summary>
/// Starts Awperative up! This method runs forever.
/// </summary>
public static void Run() {
Base = new Base();
Base.Run();
}
}

View File

@@ -0,0 +1,82 @@
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Awperative;
/// <summary>
/// Base class of Awperative. Carries events from MonoGame into scenes and hooks.
/// </summary>
/// <author> Avery Norris </author>
public sealed class Base : Game
{
/// <summary>
/// Start of Awperative. Please do not try to call this.
/// </summary>
internal Base() {
Awperative.GraphicsDeviceManager = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
/// <summary>
/// Initialize() is called when the program starts. Goes before LoadContent(). And prepares the kernel for use.
/// </summary>
/// <remarks> It is recommended not to load content in Initialize()</remarks>
protected override void Initialize() {
Awperative.ContentManager = Content;
Awperative.SpriteBatch = new SpriteBatch(GraphicsDevice);
base.Initialize();
}
/// <summary>
/// LoadContent() is called when the program starts; right after Initialize(). Override Load() in scripting tools or use hooks to call from this event.
/// </summary>
/// <remarks> It is recommended to load content during LoadContent()</remarks>
protected override void LoadContent() { foreach(Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainLoad(); }
/// <summary>
/// Update() is called every frame; before Draw(). Override Update() in scripting tools to call from this event.
/// </summary>
/// <remarks> Hooks are unable to receive both Update() and Draw()</remarks>
protected override void Update(GameTime __gameTime) { foreach(Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainUpdate(); base.Update(__gameTime); }
/// <summary>
/// Draw() is called every frame; after Update(). Override Draw() in scripting tools to call from this event.
/// </summary>
/// <remarks> Hooks are unable to receive both Update() and Draw()</remarks>
protected override void Draw(GameTime __gameTime) { foreach(Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainDraw(); base.Draw(__gameTime); }
/// <summary>
/// EndRun() is called if the program closes. Override Terminate() in scripting tools or use hooks to call from this event.
/// </summary>
/// <remarks> This event may not trigger if the program is force closed.</remarks>
protected override void EndRun() { foreach (Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainUnload(); }
}

View File

@@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
namespace Awperative;
public sealed partial class Scene : ComponentDocker
{
/// <summary>
/// Whether the scene is enabled or not.
/// </summary>
public bool Enabled = true;
/// <summary>
/// Unique Name of the Scene
/// </summary>
public string Name;
internal Scene() {}
internal Scene(string __name) { Name = __name; }
}

View File

View File

@@ -0,0 +1,22 @@
# Awperative V1.0!
### Made by Avery Norris!
---
This is the very **first official** version of Awperative! Out of the box Awperative has come with the following :
* Entity Component System using Components, Scenes and Dockers!
* Dynamic Debugging System which is used in multiple modules already
* Simple Overhead Modules
Current plans are to finish some unit tests, check Awperative up and down for naming consistency,
syntax, and bugs and begin building a Game Engine on top of it.
A few modules have been given documentation and the website is currently underway.
---

View File

@@ -0,0 +1,173 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Awperative/1.0.0": {
"dependencies": {
"MonoGame.Framework.DesktopGL": "3.8.4.1"
},
"runtime": {
"Awperative.dll": {}
}
},
"MonoGame.Framework.DesktopGL/3.8.4.1": {
"dependencies": {
"MonoGame.Library.OpenAL": "1.24.3.2",
"MonoGame.Library.SDL": "2.32.2.1",
"NVorbis": "0.10.4"
},
"runtime": {
"lib/net8.0/MonoGame.Framework.dll": {
"assemblyVersion": "3.8.4.1",
"fileVersion": "3.8.4.1"
}
}
},
"MonoGame.Library.OpenAL/1.24.3.2": {
"runtimeTargets": {
"runtimes/android-arm/native/libopenal.so": {
"rid": "android-arm",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/android-arm64/native/libopenal.so": {
"rid": "android-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/android-x64/native/libopenal.so": {
"rid": "android-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/android-x86/native/libopenal.so": {
"rid": "android-x86",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/ios-arm64/native/libopenal.a": {
"rid": "ios-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/iossimulator-arm64/native/libopenal.a": {
"rid": "iossimulator-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/iossimulator-x64/native/libopenal.a": {
"rid": "iossimulator-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-arm64/native/libopenal.so": {
"rid": "linux-arm64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/linux-x64/native/libopenal.so": {
"rid": "linux-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/osx/native/libopenal.dylib": {
"rid": "osx",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-x64/native/openal.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"MonoGame.Library.SDL/2.32.2.1": {
"runtimeTargets": {
"runtimes/linux-x64/native/libSDL2-2.0.so.0": {
"rid": "linux-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/osx/native/libSDL2-2.0.0.dylib": {
"rid": "osx",
"assetType": "native",
"fileVersion": "0.0.0.0"
},
"runtimes/win-x64/native/SDL2.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "0.0.0.0"
}
}
},
"NVorbis/0.10.4": {
"dependencies": {
"System.Memory": "4.5.3",
"System.ValueTuple": "4.5.0"
},
"runtime": {
"lib/netstandard2.0/NVorbis.dll": {
"assemblyVersion": "0.10.4.0",
"fileVersion": "0.10.4.0"
}
}
},
"System.Memory/4.5.3": {},
"System.ValueTuple/4.5.0": {}
}
},
"libraries": {
"Awperative/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"MonoGame.Framework.DesktopGL/3.8.4.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YybxIIT5+Ky78E/XdkS0glyluMr2EeDZwx2LqXULAOCqiKt1+aDrjPZaqLL5qpNgBcMEHUeZJ4YjWe4TAZlWLw==",
"path": "monogame.framework.desktopgl/3.8.4.1",
"hashPath": "monogame.framework.desktopgl.3.8.4.1.nupkg.sha512"
},
"MonoGame.Library.OpenAL/1.24.3.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nGRsXQXs+NSUC3C5w90hFQfyKdZPpBnHnyg2w+Dw/2pUH7s+CoRWTJNYbzzdJf3+aeUvfvG4rTbFvMKDDj5olA==",
"path": "monogame.library.openal/1.24.3.2",
"hashPath": "monogame.library.openal.1.24.3.2.nupkg.sha512"
},
"MonoGame.Library.SDL/2.32.2.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-T4E2ppGlSTC2L9US1rxtdg3qTbarRzNId31xZoumUW9cf9Nq8nRQPMu9GzvZGrhfSySf0+UWPEj1rlicps+P/w==",
"path": "monogame.library.sdl/2.32.2.1",
"hashPath": "monogame.library.sdl.2.32.2.1.nupkg.sha512"
},
"NVorbis/0.10.4": {
"type": "package",
"serviceable": true,
"sha512": "sha512-WYnil3DhQHzjCY0dM9I2B3r1vWip90AOuQd25KE4NrjPQBg0tBJFluRLm5YPnO5ZLDmwrfosY8jCQGQRmWI/Pg==",
"path": "nvorbis/0.10.4",
"hashPath": "nvorbis.0.10.4.nupkg.sha512"
},
"System.Memory/4.5.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
"path": "system.memory/4.5.3",
"hashPath": "system.memory.4.5.3.nupkg.sha512"
},
"System.ValueTuple/4.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
"path": "system.valuetuple/4.5.0",
"hashPath": "system.valuetuple.4.5.0.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,84 @@
{
"format": 1,
"restore": {
"/home/avery/Programming/Awperative/Awperative/Awperative.csproj": {}
},
"projects": {
"/home/avery/Programming/Awperative/Awperative/Awperative.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/avery/Programming/Awperative/Awperative/Awperative.csproj",
"projectName": "Awperative",
"projectPath": "/home/avery/Programming/Awperative/Awperative/Awperative.csproj",
"packagesPath": "/home/avery/.nuget/packages/",
"outputPath": "/home/avery/Programming/Awperative/Awperative/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/avery/.nuget/NuGet/NuGet.Config"
],
"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": {
"MonoGame.Framework.DesktopGL": {
"suppressParent": "All",
"target": "Package",
"version": "[3.8.*, )"
}
},
"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"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/avery/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/avery/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/avery/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)monogame.framework.desktopgl/3.8.4.1/build/MonoGame.Framework.DesktopGL.targets" Condition="Exists('$(NuGetPackageRoot)monogame.framework.desktopgl/3.8.4.1/build/MonoGame.Framework.DesktopGL.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,84 @@
{
"format": 1,
"restore": {
"/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj": {}
},
"projects": {
"/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj",
"projectName": "AwperativeKernel",
"projectPath": "/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj",
"packagesPath": "/home/avery/.nuget/packages/",
"outputPath": "/home/avery/Programming/Awperative/AwperativeKernel/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/avery/.nuget/NuGet/NuGet.Config"
],
"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": {
"MonoGame.Framework.DesktopGL": {
"suppressParent": "All",
"target": "Package",
"version": "[3.8.*, )"
}
},
"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"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/avery/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/avery/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/avery/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)monogame.framework.desktopgl/3.8.4.1/build/MonoGame.Framework.DesktopGL.targets" Condition="Exists('$(NuGetPackageRoot)monogame.framework.desktopgl/3.8.4.1/build/MonoGame.Framework.DesktopGL.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Awperative")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c81b942f2b46144917d85dfd8159eaa5d9120941")]
[assembly: System.Reflection.AssemblyProductAttribute("Awperative")]
[assembly: System.Reflection.AssemblyTitleAttribute("Awperative")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
953f3f98ae3da4f892b118b7b9915819e49a4cb67f398f505cf730550f31333e

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Awperative
build_property.ProjectDir = /home/avery/Programming/Awperative/Awperative/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1 @@
c7dc8b93be48955f50d651d9fc41697472d7005471fa74c204470fc68053332a

View File

@@ -0,0 +1,37 @@
/Users/averynorris/Programming/Test/Awperative/Awperative/bin/Debug/net8.0/Awperative.deps.json
/Users/averynorris/Programming/Test/Awperative/Awperative/bin/Debug/net8.0/Awperative.dll
/Users/averynorris/Programming/Test/Awperative/Awperative/bin/Debug/net8.0/Awperative.pdb
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.AssemblyReference.cache
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.GeneratedMSBuildEditorConfig.editorconfig
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfoInputs.cache
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfo.cs
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.CoreCompileInputs.cache
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.dll
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/refint/Awperative.dll
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/Awperative.pdb
/Users/averynorris/Programming/Test/Awperative/Awperative/obj/Debug/net8.0/ref/Awperative.dll
/home/avery/Programming/Awperative/Awperative/bin/Debug/net8.0/Awperative.deps.json
/home/avery/Programming/Awperative/Awperative/bin/Debug/net8.0/Awperative.dll
/home/avery/Programming/Awperative/Awperative/bin/Debug/net8.0/Awperative.pdb
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.AssemblyReference.cache
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.GeneratedMSBuildEditorConfig.editorconfig
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfoInputs.cache
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfo.cs
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.CoreCompileInputs.cache
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.dll
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/refint/Awperative.dll
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/Awperative.pdb
/home/avery/Programming/Awperative/Awperative/obj/Debug/net8.0/ref/Awperative.dll
/Users/averynorris/RiderProjects/Awperative/Awperative/bin/Debug/net8.0/Awperative.deps.json
/Users/averynorris/RiderProjects/Awperative/Awperative/bin/Debug/net8.0/Awperative.dll
/Users/averynorris/RiderProjects/Awperative/Awperative/bin/Debug/net8.0/Awperative.pdb
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.AssemblyReference.cache
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.GeneratedMSBuildEditorConfig.editorconfig
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfoInputs.cache
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.AssemblyInfo.cs
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.csproj.CoreCompileInputs.cache
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.sourcelink.json
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.dll
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/refint/Awperative.dll
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/Awperative.pdb
/Users/averynorris/RiderProjects/Awperative/Awperative/obj/Debug/net8.0/ref/Awperative.dll

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
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+c81b942f2b46144917d85dfd8159eaa5d9120941")]
[assembly: System.Reflection.AssemblyProductAttribute("AwperativeKernel")]
[assembly: System.Reflection.AssemblyTitleAttribute("AwperativeKernel")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
dc17c4d2751cab23a72eff8f845895fe7687377c833303531b3796ad7d0e9c0f

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Awperative
build_property.ProjectDir = /home/avery/Programming/Awperative/AwperativeKernel/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

Binary file not shown.

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Awperative")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c234315ee38dbfa8b6293c6dd44871d9aeb40991")]
[assembly: System.Reflection.AssemblyProductAttribute("Awperative")]
[assembly: System.Reflection.AssemblyTitleAttribute("Awperative")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
d066e513fb8736c8247ae1d554ed7e3dd23954236af618ee729f730e72074182

View File

@@ -0,0 +1,17 @@
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 =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Awperative
build_property.ProjectDir = /Users/averynorris/RiderProjects/Awperative/Awperative/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,354 @@
{
"version": 3,
"targets": {
"net8.0": {
"MonoGame.Framework.DesktopGL/3.8.4.1": {
"type": "package",
"dependencies": {
"MonoGame.Library.OpenAL": "1.24.3.2",
"MonoGame.Library.SDL": "2.32.2.1",
"NVorbis": "0.10.4"
},
"compile": {
"lib/net8.0/MonoGame.Framework.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/MonoGame.Framework.dll": {
"related": ".xml"
}
},
"build": {
"build/MonoGame.Framework.DesktopGL.targets": {}
}
},
"MonoGame.Library.OpenAL/1.24.3.2": {
"type": "package",
"runtimeTargets": {
"runtimes/android-arm/native/libopenal.so": {
"assetType": "native",
"rid": "android-arm"
},
"runtimes/android-arm64/native/libopenal.so": {
"assetType": "native",
"rid": "android-arm64"
},
"runtimes/android-x64/native/libopenal.so": {
"assetType": "native",
"rid": "android-x64"
},
"runtimes/android-x86/native/libopenal.so": {
"assetType": "native",
"rid": "android-x86"
},
"runtimes/ios-arm64/native/libopenal.a": {
"assetType": "native",
"rid": "ios-arm64"
},
"runtimes/iossimulator-arm64/native/libopenal.a": {
"assetType": "native",
"rid": "iossimulator-arm64"
},
"runtimes/iossimulator-x64/native/libopenal.a": {
"assetType": "native",
"rid": "iossimulator-x64"
},
"runtimes/linux-arm64/native/libopenal.so": {
"assetType": "native",
"rid": "linux-arm64"
},
"runtimes/linux-x64/native/libopenal.so": {
"assetType": "native",
"rid": "linux-x64"
},
"runtimes/osx/native/libopenal.dylib": {
"assetType": "native",
"rid": "osx"
},
"runtimes/win-x64/native/openal.dll": {
"assetType": "native",
"rid": "win-x64"
}
}
},
"MonoGame.Library.SDL/2.32.2.1": {
"type": "package",
"runtimeTargets": {
"runtimes/linux-x64/native/libSDL2-2.0.so.0": {
"assetType": "native",
"rid": "linux-x64"
},
"runtimes/osx/native/libSDL2-2.0.0.dylib": {
"assetType": "native",
"rid": "osx"
},
"runtimes/win-x64/native/SDL2.dll": {
"assetType": "native",
"rid": "win-x64"
}
}
},
"NVorbis/0.10.4": {
"type": "package",
"dependencies": {
"System.Memory": "4.5.3",
"System.ValueTuple": "4.5.0"
},
"compile": {
"lib/netstandard2.0/NVorbis.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/NVorbis.dll": {
"related": ".xml"
}
}
},
"System.Memory/4.5.3": {
"type": "package",
"compile": {
"ref/netcoreapp2.1/_._": {}
},
"runtime": {
"lib/netcoreapp2.1/_._": {}
}
},
"System.ValueTuple/4.5.0": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
}
}
},
"libraries": {
"MonoGame.Framework.DesktopGL/3.8.4.1": {
"sha512": "YybxIIT5+Ky78E/XdkS0glyluMr2EeDZwx2LqXULAOCqiKt1+aDrjPZaqLL5qpNgBcMEHUeZJ4YjWe4TAZlWLw==",
"type": "package",
"path": "monogame.framework.desktopgl/3.8.4.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"README-packages.md",
"build/MonoGame.Framework.DesktopGL.targets",
"lib/net8.0/MonoGame.Framework.dll",
"lib/net8.0/MonoGame.Framework.xml",
"monogame.framework.desktopgl.3.8.4.1.nupkg.sha512",
"monogame.framework.desktopgl.nuspec"
]
},
"MonoGame.Library.OpenAL/1.24.3.2": {
"sha512": "nGRsXQXs+NSUC3C5w90hFQfyKdZPpBnHnyg2w+Dw/2pUH7s+CoRWTJNYbzzdJf3+aeUvfvG4rTbFvMKDDj5olA==",
"type": "package",
"path": "monogame.library.openal/1.24.3.2",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE",
"README.md",
"monogame.library.openal.1.24.3.2.nupkg.sha512",
"monogame.library.openal.nuspec",
"runtimes/android-arm/native/libopenal.so",
"runtimes/android-arm64/native/libopenal.so",
"runtimes/android-x64/native/libopenal.so",
"runtimes/android-x86/native/libopenal.so",
"runtimes/ios-arm64/native/libopenal.a",
"runtimes/iossimulator-arm64/native/libopenal.a",
"runtimes/iossimulator-x64/native/libopenal.a",
"runtimes/linux-arm64/native/libopenal.so",
"runtimes/linux-x64/native/libopenal.so",
"runtimes/osx/native/libopenal.dylib",
"runtimes/win-x64/native/openal.dll"
]
},
"MonoGame.Library.SDL/2.32.2.1": {
"sha512": "T4E2ppGlSTC2L9US1rxtdg3qTbarRzNId31xZoumUW9cf9Nq8nRQPMu9GzvZGrhfSySf0+UWPEj1rlicps+P/w==",
"type": "package",
"path": "monogame.library.sdl/2.32.2.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.txt",
"README.md",
"monogame.library.sdl.2.32.2.1.nupkg.sha512",
"monogame.library.sdl.nuspec",
"runtimes/linux-x64/native/libSDL2-2.0.so.0",
"runtimes/osx/native/libSDL2-2.0.0.dylib",
"runtimes/win-x64/native/SDL2.dll"
]
},
"NVorbis/0.10.4": {
"sha512": "WYnil3DhQHzjCY0dM9I2B3r1vWip90AOuQd25KE4NrjPQBg0tBJFluRLm5YPnO5ZLDmwrfosY8jCQGQRmWI/Pg==",
"type": "package",
"path": "nvorbis/0.10.4",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"lib/net45/NVorbis.dll",
"lib/net45/NVorbis.xml",
"lib/netstandard2.0/NVorbis.dll",
"lib/netstandard2.0/NVorbis.xml",
"nvorbis.0.10.4.nupkg.sha512",
"nvorbis.nuspec"
]
},
"System.Memory/4.5.3": {
"sha512": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
"type": "package",
"path": "system.memory/4.5.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/netcoreapp2.1/_._",
"lib/netstandard1.1/System.Memory.dll",
"lib/netstandard1.1/System.Memory.xml",
"lib/netstandard2.0/System.Memory.dll",
"lib/netstandard2.0/System.Memory.xml",
"ref/netcoreapp2.1/_._",
"system.memory.4.5.3.nupkg.sha512",
"system.memory.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.ValueTuple/4.5.0": {
"sha512": "okurQJO6NRE/apDIP23ajJ0hpiNmJ+f0BwOlB/cSqTLQlw5upkf+5+96+iG2Jw40G1fCVCyPz/FhIABUjMR+RQ==",
"type": "package",
"path": "system.valuetuple/4.5.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/MonoAndroid10/_._",
"lib/MonoTouch10/_._",
"lib/net461/System.ValueTuple.dll",
"lib/net461/System.ValueTuple.xml",
"lib/net47/System.ValueTuple.dll",
"lib/net47/System.ValueTuple.xml",
"lib/netcoreapp2.0/_._",
"lib/netstandard1.0/System.ValueTuple.dll",
"lib/netstandard1.0/System.ValueTuple.xml",
"lib/netstandard2.0/_._",
"lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll",
"lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml",
"lib/uap10.0.16299/_._",
"lib/xamarinios10/_._",
"lib/xamarinmac20/_._",
"lib/xamarintvos10/_._",
"lib/xamarinwatchos10/_._",
"ref/MonoAndroid10/_._",
"ref/MonoTouch10/_._",
"ref/net461/System.ValueTuple.dll",
"ref/net47/System.ValueTuple.dll",
"ref/netcoreapp2.0/_._",
"ref/netstandard2.0/_._",
"ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll",
"ref/uap10.0.16299/_._",
"ref/xamarinios10/_._",
"ref/xamarinmac20/_._",
"ref/xamarintvos10/_._",
"ref/xamarinwatchos10/_._",
"system.valuetuple.4.5.0.nupkg.sha512",
"system.valuetuple.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
}
},
"projectFileDependencyGroups": {
"net8.0": [
"MonoGame.Framework.DesktopGL >= 3.8.*"
]
},
"packageFolders": {
"/home/avery/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj",
"projectName": "AwperativeKernel",
"projectPath": "/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj",
"packagesPath": "/home/avery/.nuget/packages/",
"outputPath": "/home/avery/Programming/Awperative/AwperativeKernel/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/avery/.nuget/NuGet/NuGet.Config"
],
"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": {
"MonoGame.Framework.DesktopGL": {
"suppressParent": "All",
"target": "Package",
"version": "[3.8.*, )"
}
},
"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"
}
}
}
}

View File

@@ -0,0 +1,17 @@
{
"version": 2,
"dgSpecHash": "aH9ae8q0knA=",
"success": true,
"projectFilePath": "/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj",
"expectedPackageFiles": [
"/home/avery/.nuget/packages/monogame.framework.desktopgl/3.8.4.1/monogame.framework.desktopgl.3.8.4.1.nupkg.sha512",
"/home/avery/.nuget/packages/monogame.library.openal/1.24.3.2/monogame.library.openal.1.24.3.2.nupkg.sha512",
"/home/avery/.nuget/packages/monogame.library.sdl/2.32.2.1/monogame.library.sdl.2.32.2.1.nupkg.sha512",
"/home/avery/.nuget/packages/nvorbis/0.10.4/nvorbis.0.10.4.nupkg.sha512",
"/home/avery/.nuget/packages/system.memory/4.5.3/system.memory.4.5.3.nupkg.sha512",
"/home/avery/.nuget/packages/system.valuetuple/4.5.0/system.valuetuple.4.5.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": []
}

View File

@@ -0,0 +1 @@
"restore":{"projectUniqueName":"/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj","projectName":"AwperativeKernel","projectPath":"/home/avery/Programming/Awperative/AwperativeKernel/AwperativeKernel.csproj","outputPath":"/home/avery/Programming/Awperative/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":{"MonoGame.Framework.DesktopGL":{"suppressParent":"All","target":"Package","version":"[3.8.*, )"}},"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"}}

View File

@@ -0,0 +1 @@
17712657192032735

View File

@@ -0,0 +1 @@
17712826495735493