Compare commits

..

19 Commits

Author SHA1 Message Date
ba515502f9 Unversioned Files 2026-02-17 20:29:02 -05:00
3c2ad05cab Moved to OpenTK 2026-02-17 20:27:18 -05:00
abbfe285b6 Renamed To Kernel 2026-02-16 18:00:08 -05:00
c81b942f2b Moving to mac 2026-02-15 22:37:39 -05:00
283cadc490 Awperative Beta Complete! V1.0 2026-02-15 20:38:50 -05:00
1f96b653ad Awperative Beta! 2026-02-15 20:34:29 -05:00
de8e9aca44 Awperative Beta 1.0 Complete! 2026-02-15 16:12:25 -05:00
0e21432ffb Closing in on beta 2026-02-15 15:42:22 -05:00
31566cb64c Finished component docker mostly! 2026-02-15 14:37:31 -05:00
10bc10062f COOKING 2026-02-15 13:47:12 -05:00
4ac4c39d2f Big work 2026-02-15 10:02:21 -05:00
843979e10b Comptime 2026-02-14 17:22:42 -05:00
44a9ce41f3 Cleaning house 2026-02-14 10:40:10 -05:00
6cb3c2e53f Close we are CLOSE 2026-02-13 22:19:55 -05:00
bdd9b7bed8 Minimalizing Kernel 2026-02-13 13:21:36 -05:00
fd4c07844b Awperative Completely Reworked! 2026-02-12 16:47:42 -05:00
8bfc8437dc Generalizing Bodies 2026-02-12 12:24:12 -05:00
9d8593a3f5 Generalizing Bodies 2026-02-12 12:23:25 -05:00
e9ede187c7 Seperating transform 2026-02-11 21:04:23 -05:00
432 changed files with 2679 additions and 28341 deletions

306
.idea/.idea.Awperative/.idea/workspace.xml generated Normal file
View File

@@ -0,0 +1,306 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="a0780d2b-c545-4e94-9f04-a86ef3682e61" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.dll" beforeDir="false" afterPath="$PROJECT_DIR$/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.dll" afterDir="false" />
<change beforePath="$PROJECT_DIR$/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.pdb" beforeDir="false" afterPath="$PROJECT_DIR$/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.pdb" afterDir="false" />
<change beforePath="$PROJECT_DIR$/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs" beforeDir="false" afterPath="$PROJECT_DIR$/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache" beforeDir="false" afterPath="$PROJECT_DIR$/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
<option name="RESET_MODE" value="HARD" />
</component>
<component name="GitHubPullRequestSearchHistory">{
&quot;lastFilter&quot;: {
&quot;state&quot;: &quot;OPEN&quot;,
&quot;assignee&quot;: &quot;BlazeyDotOrg&quot;
}
}</component>
<component name="GithubPullRequestsUISettings">{
&quot;selectedUrlAndAccountId&quot;: {
&quot;url&quot;: &quot;https://github.com/BlazeyDotOrg/Awperative.git&quot;,
&quot;accountId&quot;: &quot;344e2461-798d-4d88-a9cb-8af344064ac4&quot;
}
}</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$PROJECT_DIR$/AwperativeKernel/.config/dotnet-tools.json" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/Component/Component.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/ComponentDocker/ComponentDocker.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/Debug/Debug.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/Overhead/Awperative/Awperative.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/Overhead/Base/Base.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/AwperativeKernel/Kernel/Scene/Scene.cs" root0="FORCE_HIGHLIGHTING" />
</component>
<component name="MetaFilesCheckinStateConfiguration" checkMetaFiles="true" />
<component name="ProblemsViewState">
<option name="selectedTabId" value="CurrentFile" />
</component>
<component name="ProjectColorInfo">{
&quot;associatedIndex&quot;: 2
}</component>
<component name="ProjectId" id="38ULMW7J55snE1NrOYpCSyseES9" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
&quot;to.speed.mode.migration.done&quot;: &quot;true&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="a0780d2b-c545-4e94-9f04-a86ef3682e61" name="Changes" comment="" />
<created>1768849154932</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1768849154932</updated>
<workItem from="1768849155978" duration="441000" />
<workItem from="1768849620634" duration="6151000" />
<workItem from="1768861303093" duration="3811000" />
<workItem from="1768872615185" duration="711000" />
<workItem from="1768886562898" duration="7000" />
<workItem from="1768886596003" duration="316000" />
<workItem from="1768927033736" duration="244000" />
<workItem from="1768934765323" duration="2244000" />
<workItem from="1769097334164" duration="30000" />
<workItem from="1769098276943" duration="14000" />
<workItem from="1769098781841" duration="1162000" />
<workItem from="1769795388086" duration="489000" />
<workItem from="1769821910140" duration="55000" />
<workItem from="1769821972103" duration="3036000" />
<workItem from="1769883377911" duration="132000" />
<workItem from="1769962701776" duration="4162000" />
<workItem from="1769997445805" duration="5322000" />
<workItem from="1770004954148" duration="524000" />
<workItem from="1770065212824" duration="1444000" />
<workItem from="1770164825511" duration="1170000" />
<workItem from="1770326257383" duration="2548000" />
<workItem from="1770508284646" duration="1792000" />
<workItem from="1770573413396" duration="12078000" />
<workItem from="1771107787272" duration="423000" />
<workItem from="1771108231868" duration="10705000" />
<workItem from="1771178686137" duration="6030000" />
<workItem from="1771184740961" duration="118000" />
<workItem from="1771184893794" duration="11065000" />
<workItem from="1771210274167" duration="133000" />
<workItem from="1771263045596" duration="650000" />
<workItem from="1771265712703" duration="2201000" />
<workItem from="1771268603392" duration="4948000" />
</task>
<task id="LOCAL-00001" summary="Pre initialize removal">
<option name="closed" value="true" />
<created>1769822570538</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1769822570538</updated>
</task>
<task id="LOCAL-00002" summary="Removed Initialize()">
<option name="closed" value="true" />
<created>1769823457825</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1769823457825</updated>
</task>
<task id="LOCAL-00003" summary="Changed terminate into unload">
<option name="closed" value="true" />
<created>1769823754859</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1769823754859</updated>
</task>
<task id="LOCAL-00004" summary="Going to bed but i wanna show off my cool debugging system">
<option name="closed" value="true" />
<created>1770004973461</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1770004973461</updated>
</task>
<task id="LOCAL-00005" summary="Near V1.0">
<option name="closed" value="true" />
<created>1770573442920</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1770573442920</updated>
</task>
<task id="LOCAL-00006" summary="Merging Components And Behaviors">
<option name="closed" value="true" />
<created>1770584193348</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1770584193348</updated>
</task>
<task id="LOCAL-00007" summary="Testing gittea">
<option name="closed" value="true" />
<created>1770585216828</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1770585216828</updated>
</task>
<task id="LOCAL-00008" summary="Messing with stuff idk if i like">
<option name="closed" value="true" />
<created>1770593582353</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1770593582354</updated>
</task>
<task id="LOCAL-00009" summary="Messing with stuff idk if i like">
<option name="closed" value="true" />
<created>1770593737356</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1770593737356</updated>
</task>
<task id="LOCAL-00010" summary="Big work">
<option name="closed" value="true" />
<created>1771167742821</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1771167742821</updated>
</task>
<task id="LOCAL-00011" summary="COOKING">
<option name="closed" value="true" />
<created>1771181234503</created>
<option name="number" value="00011" />
<option name="presentableId" value="LOCAL-00011" />
<option name="project" value="LOCAL" />
<updated>1771181234503</updated>
</task>
<task id="LOCAL-00012" summary="Finished component docker mostly!">
<option name="closed" value="true" />
<created>1771184252214</created>
<option name="number" value="00012" />
<option name="presentableId" value="LOCAL-00012" />
<option name="project" value="LOCAL" />
<updated>1771184252214</updated>
</task>
<task id="LOCAL-00013" summary="Closing in on beta">
<option name="closed" value="true" />
<created>1771188148264</created>
<option name="number" value="00013" />
<option name="presentableId" value="LOCAL-00013" />
<option name="project" value="LOCAL" />
<updated>1771188148264</updated>
</task>
<task id="LOCAL-00014" summary="Awperative Beta 1.0 Complete!">
<option name="closed" value="true" />
<created>1771189947056</created>
<option name="number" value="00014" />
<option name="presentableId" value="LOCAL-00014" />
<option name="project" value="LOCAL" />
<updated>1771189947056</updated>
</task>
<task id="LOCAL-00015" summary="Awperative Beta!">
<option name="closed" value="true" />
<created>1771205670552</created>
<option name="number" value="00015" />
<option name="presentableId" value="LOCAL-00015" />
<option name="project" value="LOCAL" />
<updated>1771205670552</updated>
</task>
<task id="LOCAL-00016" summary="Awperative Beta Complete! V1.0">
<option name="closed" value="true" />
<created>1771205931449</created>
<option name="number" value="00016" />
<option name="presentableId" value="LOCAL-00016" />
<option name="project" value="LOCAL" />
<updated>1771205931449</updated>
</task>
<task id="LOCAL-00017" summary="Renamed To Kernel">
<option name="closed" value="true" />
<created>1771282809574</created>
<option name="number" value="00017" />
<option name="presentableId" value="LOCAL-00017" />
<option name="project" value="LOCAL" />
<updated>1771282809574</updated>
</task>
<option name="localTasksCounter" value="18" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
<component name="UnityProjectConfiguration" hasMinimizedUI="false" />
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
<MESSAGE value="Pre initialize removal" />
<MESSAGE value="Removed Initialize()" />
<MESSAGE value="Changed terminate into unload" />
<MESSAGE value="Going to bed but i wanna show off my cool debugging system" />
<MESSAGE value="Near V1.0" />
<MESSAGE value="Merging Components And Behaviors" />
<MESSAGE value="Testing gittea" />
<MESSAGE value="Not happy with changes" />
<MESSAGE value="Messing with stuff idk if i like" />
<MESSAGE value="Big work" />
<MESSAGE value="COOKING" />
<MESSAGE value="Finished component docker mostly!" />
<MESSAGE value="Closing in on beta" />
<MESSAGE value="Awperative Beta 1.0 Complete!" />
<MESSAGE value="Awperative Beta!" />
<MESSAGE value="Awperative Beta Complete! V1.0" />
<MESSAGE value="Renamed To Kernel" />
<option name="LAST_COMMIT_MESSAGE" value="Renamed To Kernel" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.OperationCanceledException" breakIfHandledByOtherCode="false" displayValue="System.OperationCanceledException" />
<option name="timeStamp" value="1" />
</breakpoint>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.Threading.Tasks.TaskCanceledException" breakIfHandledByOtherCode="false" displayValue="System.Threading.Tasks.TaskCanceledException" />
<option name="timeStamp" value="2" />
</breakpoint>
<breakpoint enabled="true" type="DotNet_Exception_Breakpoints">
<properties exception="System.Threading.ThreadAbortException" breakIfHandledByOtherCode="false" displayValue="System.Threading.ThreadAbortException" />
<option name="timeStamp" value="3" />
</breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
</project>

View File

@@ -0,0 +1 @@
AwperativeKernel

View File

@@ -2,6 +2,8 @@
<dictionary name="project">
<words>
<w>awlf</w>
<w>awperative</w>
<w>awperative's</w>
</words>
</dictionary>
</component>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT" />
<option name="description" value="" />
<option name="applicationTheme" value="default" />
<option name="iconsTheme" value="default" />
<option name="button1Title" value="" />
<option name="button1Url" value="" />
<option name="button2Title" value="" />
<option name="button2Url" value="" />
<option name="customApplicationId" value="" />
</component>
</project>

View File

@@ -1,10 +0,0 @@
namespace Awperative.Kernel.Communication.Config;
//TEMPORARY LIST OF VARIABLES, CONFIG DOESNT EXIST YET SO IM MAKING A VARIABLE LIST TO SEE WHAT I NEED TO REPLACE
public static class Config
{
public static string logFileName = "log";
}

View File

@@ -1 +0,0 @@
todo: make a yaml file for the kernel config and this can find it outside of the kernel

View File

@@ -1,37 +0,0 @@
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using Awperative.Kernel.Communication.Config;
namespace Awperative;
public static partial class Debug
{
/// <summary>
/// True path of the log file Awperative dumps to.
/// </summary>
public static string LogFilePath { get; private set; }
/// <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!");
if(!Directory.GetFiles(directoryPath).Contains(Config.logFileName + ".awlf")) throw new Exception("Failed to find log file!");
LogFilePath = Path.Join(directoryPath, Config.logFileName + ".awlf");
}
}

View File

@@ -1,96 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
namespace Awperative;
public sealed partial class Body : DockerEntity
{
/// <summary>
/// Current scene the body exists in
/// </summary>
public Scene Scene { get; internal set; }
/// <summary>
/// All components attached to the body
/// </summary>
public List<Component> Components => _components.ToList();
internal HashSet<Component> _components { get; private set; } = [];
/// <summary>
/// All tags attached to the body
/// </summary>
public List<string> Tags => _tags.ToList();
internal HashSet<string> _tags { get; private set; }= [];
/// <summary>
/// Position of the body
/// </summary>
public Transform transform { get; internal set; } = new();
//Prevents outside construction
internal Body() {}
/// <summary>
/// Creates a body in the given scene
/// </summary>
/// <param name="__scene"></param>
internal Body(Scene __scene) {
Scene = __scene;
}
/// <summary>
/// Creates a body with a scene and transform
/// </summary>
/// <param name="__scene"></param>
/// <param name="__transform"></param>
internal Body(Scene __scene, Transform __transform) {
Scene = __scene;
transform = __transform;
}
internal void Unload() { foreach (Component component in _components) component.Unload(); }
internal void Load() { foreach (Component component in _components) { component.Load(); } }
internal void Update(GameTime __gameTime) { foreach (Component component in _components) { component.Update(__gameTime); } }
internal void Draw(GameTime __gameTime) { foreach (Component component in _components) { component.Draw(__gameTime); } }
internal void Destroy() { foreach(Component component in _components) component.Destroy(); }
internal void Create() { foreach (Component component in _components) component.Create(); }
}

View File

@@ -1,23 +0,0 @@
using System;
namespace Awperative;
public abstract partial class DockerEntity
{
public Component AddComponent<Generic>() where Generic : Component => AddComponent<Generic>([]);
public Component AddComponent<Generic>(object[] __args) where Generic : Component {
if(typeof(Generic).GetConstructor((Type[]) __args) == null) { Debug.LogError("Component does not contain a valid constructor"); return null; };
try {
Component component = (Generic)Activator.CreateInstance(typeof(Generic), __args);
if(component == null) { Debug.LogError("Failed to create component"); return null; }
_components.Add(component);
component.Initiate(this);
return component;
}catch { Debug.LogError("Failed to create component"); return null; }
}
}

View File

@@ -1,16 +0,0 @@
using System.Collections.Generic;
using System.Linq;
namespace Awperative;
/// <summary>
/// Base class for all Awperative entities, manages components as a requirement because that is the job of all entities.
/// </summary>
public abstract partial class DockerEntity
{
public Scene Scene;
internal HashSet<Component> _components;
}

View File

@@ -1,19 +0,0 @@
using System;
using System.Collections.Generic;
namespace Awperative;
public abstract partial class DockerEntity
{
public Component GetComponent<Generic>() where Generic : Component => GetComponents<Generic>()[0];
public Component[] GetComponents<Generic>() where Generic : Component {
List<Component> returnValue = [];
foreach (Component component in _components)
if (component is Generic) returnValue.Add(component);
if(returnValue.Count == 0) { Debug.LogWarning("Scene has no components of this type"); return null; }
return returnValue.ToArray();
}
}

View File

@@ -1,31 +0,0 @@
namespace Awperative;
public abstract partial class DockerEntity
{
public void RemoveComponent(Component __component) {
if(!_components.Contains(__component)) { Debug.LogError("Body does not have a component of this type"); return; }
__component.End();
_components.Remove(__component);
}
public void RemoveComponent<Generic>() where Generic : Component {
try
{
Component foundComponent = GetComponent<Generic>();
foundComponent.End();
_components.Remove(foundComponent);
}catch { Debug.LogError("Removal failed"); }
}
public void RemoveComponents<Generic>() where Generic : Component {
try {
foreach (Component component in GetComponents<Generic>()) {
component.End();
_components.Remove(component);
}
}catch { Debug.LogError("Removal failed"); }
}
}

View File

@@ -1,64 +0,0 @@
using System;
using System.Collections.Generic;
namespace Awperative;
public sealed partial class Scene : DockerEntity
{
public Body AddBody(Transform __transform) {
Body body = new Body(this, __transform);
bodies.Add(body);
body.Create();
BodyCreatedEvent?.Invoke(this, new BodyCreateEvent(body, this));
return body;
}
public Body AddBody() {
Body body = new Body(this, new Transform());
bodies.Add(body);
body.Create();
BodyCreatedEvent?.Invoke(this, new BodyCreateEvent(body, this));
return body;
}
public Body[] GetBodies(string tag) {
List<Body> _bodies = new List<Body>();
foreach (Body body in bodies)
if (body._tags.Contains(tag))
_bodies.Add(body);
if(_bodies.Count == 0)
throw new Exception("No Bodies found with the tag " + tag);
return _bodies.ToArray();
}
public Body GetBody(string tag) {
foreach (Body body in bodies)
if (body._tags.Contains(tag))
return body;
throw new Exception("No Body found with the tag " + tag);
}
public void DestroyBody(Body __body) {
__body.Destroy();
BodyDestroyedEvent?.Invoke(this, new BodyDestroyEvent(__body, this));
if (!bodies.Remove(__body))
throw new Exception("Removal Failed! Does the Body Exist?");
}
//todo: add destroying and creating bodies with tags
//TAG SYSTEM IN V4
}

View File

@@ -1,35 +0,0 @@
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
namespace Awperative;
public sealed partial class Scene : DockerEntity
{
public List<Body> bodies { get; private set; } = [];
public void Unload() {
foreach (Component component in _components) component.Unload();
foreach (Body body in bodies.ToList()) body.Unload();
}
public void Load() {
foreach (Component component in _components) component.Load();
foreach (Body body in bodies.ToList()) { body.Load(); }
}
public void Update(GameTime __gameTime) {
foreach (Component component in _components) component.Update(__gameTime);
foreach (Body body in bodies.ToList()) { body.Update(__gameTime); }
}
public void Draw(GameTime __gameTime) {
foreach (Component component in _components) component.Draw(__gameTime);
foreach (Body body in bodies.ToList()) { body.Draw(__gameTime); }
}
//todo: add scene.destroy in v5
}

View File

@@ -1,12 +0,0 @@
using System;
namespace Awperative;
public sealed partial class Scene : DockerEntity
{
public event EventHandler<BodyCreateEvent> BodyCreatedEvent;
public event EventHandler<BodyDestroyEvent> BodyDestroyedEvent;
}

View File

@@ -1,15 +0,0 @@
namespace Awperative;
public sealed record BodyCreateEvent
{
public readonly Body body;
public readonly Scene scene;
internal BodyCreateEvent() {}
internal BodyCreateEvent(Body __body, Scene __scene)
{
body = __body;
scene = __scene;
}
}

View File

@@ -1,15 +0,0 @@
namespace Awperative;
public sealed record BodyDestroyEvent
{
public readonly Body body;
public readonly Scene scene;
internal BodyDestroyEvent() {}
internal BodyDestroyEvent(Body __body, Scene __scene)
{
body = __body;
scene = __scene;
}
}

View File

@@ -1,17 +0,0 @@
namespace Awperative;
public sealed record ComponentCreateEvent
{
public readonly Component component;
public readonly Body body;
public readonly Scene scene;
internal ComponentCreateEvent() {}
internal ComponentCreateEvent(Component __component, Body __body, Scene __scene)
{
component = __component;
body = __body;
scene = __scene;
}
}

View File

@@ -1,17 +0,0 @@
namespace Awperative;
public sealed record ComponentDestroyEvent
{
public readonly Component component;
public readonly Body body;
public readonly Scene scene;
internal ComponentDestroyEvent() {}
internal ComponentDestroyEvent(Component __component, Body __body, Scene __scene)
{
component = __component;
body = __body;
scene = __scene;
}
}

View File

@@ -1,14 +0,0 @@
namespace Awperative;
public sealed record SceneCreateEvent
{
public Scene scene;
internal SceneCreateEvent() {}
internal SceneCreateEvent(Scene __scene)
{
scene = __scene;
}
}

View File

@@ -1,14 +0,0 @@
namespace Awperative;
public sealed record SceneDestroyEvent
{
public Scene scene;
internal SceneDestroyEvent() {}
internal SceneDestroyEvent(Scene __scene)
{
scene = __scene;
}
}

View File

@@ -1,60 +0,0 @@
using Microsoft.Xna.Framework;
namespace Awperative;
public sealed record TransformModifyEvent
{
public readonly Transform before;
public readonly Transform after;
internal TransformModifyEvent() {}
internal TransformModifyEvent(Transform __before, Transform __after)
{
before = __before;
after = __after;
}
internal static TransformModifyEvent FromTransforms(Transform __previous, Transform __after)
{
Transform before = __previous;
Transform after = new Transform(__after.Origin, __after.Position, __after.Depth, __after.Rotation, __after.Scale);
return new TransformModifyEvent(before, after);
}
internal static TransformModifyEvent FromOrigin(Transform __previous, Vector2 __origin)
{
Transform before = __previous;
Transform after = new Transform(__origin, __previous.Position, __previous.Depth, __previous.Rotation, __previous.Scale);
return new TransformModifyEvent(before, after);
}
internal static TransformModifyEvent FromPosition(Transform __previous, Vector2 __position)
{
Transform before = __previous;
Transform after = new Transform(__previous.Origin, __position, __previous.Depth, __previous.Rotation, __previous.Scale);
return new TransformModifyEvent(before, after);
}
internal static TransformModifyEvent FromDepth(Transform __previous, float __depth)
{
Transform before = __previous;
Transform after = new Transform(__previous.Origin, __previous.Position, __depth, __previous.Rotation, __previous.Scale);
return new TransformModifyEvent(before, after);
}
internal static TransformModifyEvent FromRotation(Transform __previous, float __rotation)
{
Transform before = __previous;
Transform after = new Transform(__previous.Origin, __previous.Position, __previous.Depth, __rotation, __previous.Scale);
return new TransformModifyEvent(before, after);
}
internal static TransformModifyEvent FromScale(Transform __previous, Vector2 __scale)
{
Transform before = __previous;
Transform after = new Transform(__previous.Origin, __previous.Position, __previous.Depth, __previous.Rotation, __scale);
return new TransformModifyEvent(before, after);
}
}

View File

@@ -1,3 +0,0 @@
ESSENTIAL TO THE FUNCTION OF THE GAME,
Component entity system!

View File

@@ -1,25 +0,0 @@
namespace Awperative;
/// <summary>
/// Awperative hooks are the source of entry for scripts using Awperative. Create a hook and send into Start() to be recognized by the engine.
/// </summary>
/// <author> Avery Norris </author>
public interface AwperativeHook
{
/// <summary>
/// Called when the program starts; It is not recommended you load assets here.
/// </summary>
public void Load() {}
/// <summary>
/// Called when the program closes.
/// </summary>
public void Unload() {}
}

View File

@@ -1,94 +0,0 @@
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 (AwperativeHook hook in Awperative.EventHooks.ToList()) hook.Load();
foreach(Scene scene in Awperative.LoadedScenes.ToList()) scene.Load();
}
/// <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.LoadedScenes.ToList()) scene.Update(__gameTime);
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.LoadedScenes.ToList()) scene.Draw(__gameTime);
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 (AwperativeHook hook in Awperative.EventHooks.ToList()) hook.Unload();
foreach (Scene scene in Awperative.LoadedScenes.ToList()) scene.Unload();
}
}

View File

@@ -1,87 +0,0 @@
using System.Collections.Generic;
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 List<Scene> LoadedScenes => _loadedScenes.ToList();
internal static HashSet<Scene> _loadedScenes { get; private set; }= [];
/// <summary>
/// List of all event hooks currently loaded in the kernel.
/// </summary>
public static List<AwperativeHook> EventHooks => _eventHooks.ToList();
internal static HashSet<AwperativeHook> _eventHooks { get; private set; } = [];
/// <summary>
/// Start() begins the game; and begins communication with all event hooks.
/// </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(List<AwperativeHook> __hooks) {
_eventHooks = new HashSet<AwperativeHook>(__hooks);
Base = new Base();
Base.Run();
}
}

View File

@@ -1,19 +0,0 @@
namespace Awperative;
public class BodyComponent : Component
{
public Body Body;
internal override void Initiate(DockerEntity __docker) {
Docker = __docker;
Body = (Body)__docker;
Create();
}
public Transform Transform => Body.transform;
}

View File

@@ -1,51 +0,0 @@
using Microsoft.Xna.Framework;
namespace Awperative;
/// <summary>
/// The lowest level scripting class in Awperative. Components are scene level and provide access to all scene level methods, can be applied to any docker and inherited
/// Sadly component does not have excessive access to specific types.
/// Anything that inherits Component is built to work in any DockerEntity, which leads to generic
/// Assumptions. If you want to make a body specific or scene specific component both classes are available.
/// </summary>
public abstract partial class Component
{
public Scene Scene { get; set; }
internal DockerEntity Docker;
internal virtual void Initiate(DockerEntity __docker) {
Docker = __docker;
Create();
}
internal virtual void End() {
Destroy();
}
//GAME HAS JUST BEGUN/ended
public virtual void Unload() {}
//WE ARE LOADING STUFF
public virtual void Load() {}
//You know what these do
public virtual void Update(GameTime __gameTime) {}
public virtual void Draw(GameTime __gameTime) {}
//component/body/scene is being created or destroyed
public virtual void Create() {}
public virtual void Destroy() {}
}

View File

@@ -1,26 +0,0 @@
namespace Awperative;
public abstract partial class Component
{
protected Body AddBody() => Scene.AddBody();
protected Body AddBody(Transform __transform) => Scene.AddBody(__transform);
protected Body GetBody(string __tag) => Scene.GetBody(__tag);
protected Body[] GetBodies(string __tag) => Scene.GetBodies(__tag);
protected void DestroyBody(Body __body) => Scene.DestroyBody(__body);
public Component AddComponent<Generic>() where Generic : Component => Docker.AddComponent<Generic>();
public Component AddComponent<Generic>(object[] __args) where Generic : Component => Docker.AddComponent<Generic>(__args);
public Component GetComponent<Generic>() where Generic : Component => Docker.GetComponent<Generic>();
public Component[] GetComponents<Generic>() where Generic : Component => Docker.GetComponents<Generic>();
public void RemoveComponent<Generic>() where Generic : Component => Docker.RemoveComponent<Generic>();
}

View File

@@ -1,7 +0,0 @@
namespace Awperative;
public class SceneComponent : Component
{
}

View File

@@ -1,92 +0,0 @@
using System;
using Microsoft.Xna.Framework;
namespace Awperative;
public sealed class Transform
{
public event EventHandler<TransformModifyEvent> OnTransformChangedEvent;
public Vector2 Origin {
get => _origin; set {
if(!value.Equals(_origin))
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromPosition(this, value)); _origin = value;
}
}
private Vector2 _origin = Vector2.Zero;
public Vector2 Position {
get => _position; set {
if(!value.Equals(_position))
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromPosition(this, value)); _position = value;
}
}
private Vector2 _position = Vector2.Zero;
public float Depth {
get => _depth; set {
if(!value.Equals(_depth))
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromDepth(this, value)); _depth = value;
}
}
private float _depth = 0f;
public float Rotation {
get => _rotation; set {
if(!value.Equals(_rotation))
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromRotation(this, value)); _rotation = value;
}
}
private float _rotation = 0f;
public Vector2 Scale {
get => _scale; set {
if(!value.Equals(_scale))
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromScale(this, value)); _scale = value;
}
}
private Vector2 _scale = Vector2.One;
public void Set(Vector2 __origin, Vector2 __position, float __depth, float __rotation, Vector2 __scale)
{
//todo: rename to previous and check names`
var previous = Clone();
bool changed = false;
if (!_origin.Equals(_origin)) { _origin = __origin; changed = true; }
if (!_position.Equals(_position)) { _position = __position; changed = true; }
if (!_depth.Equals(_depth)) { _depth = __depth; changed = true; }
if (!_rotation.Equals(_rotation)) { _rotation = __rotation; changed = true; }
if (!_scale.Equals(_scale)) { _scale = __scale; changed = true; }
if (changed)
OnTransformChangedEvent?.Invoke(this, TransformModifyEvent.FromTransforms(this, previous));
}
public Transform() {}
public Transform(Vector2 __origin, Vector2 __position, float __depth, float __rotation, Vector2 __scale) {
Origin = __origin; Position = __position; Depth = __depth; Rotation = __rotation; Scale = __scale;
}
//todo: operators?
public Transform Clone()
{
return new Transform(Origin, Position, Depth, Rotation, Scale);
}
public Matrix ToMatrix()
{
return
Matrix.CreateTranslation(new Vector3(-Position, 0f)) *
Matrix.CreateTranslation(new Vector3(-Origin, 0f)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Scale, 1f)) *
Matrix.CreateTranslation(new Vector3(Origin, 0f));
}
}

View File

@@ -1,24 +0,0 @@
events system
json parser
cool lossless compressor to make my files look more complex
name save files something like ansf
//todo: spinny loady wheel, error graphic and make it so multiple scenes can be loaded and modularized, make it so behaviors can be enabled and disabled and merging scenes loading
body tags, behavior and component tags search methods add a way to enforce one component between all scenes, behaviors and components upgrade base script
show colliders option
streamline asset registries
make the grass go in blocks kinda
and add a fading border to the edge of grass
add multiple languages
add collision layers and triggers
add aabb change events

View File

@@ -1 +0,0 @@
fa2b4821447810806d3afc7ff154ca6553ecde4f605fa901efe2c43ad8759842

View File

@@ -1 +0,0 @@
95848c046b9b32c14cf563754dd778d9bd1782510c1ef05d43cd25a8dc421370

View File

@@ -1 +0,0 @@
{"documents":{"/Users/averynorris/RiderProjects/Awperative/*":"https://raw.githubusercontent.com/BlazeyDotOrg/Awperative/67fca0c271ce945c612999f54223bca0718349dc/*"}}

View File

@@ -1 +0,0 @@
d05380611b45c280c2c51346ebb3590dc0f2639035a478a07d822a068d5cc4af

View File

@@ -1,354 +0,0 @@
{
"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": {
"/Users/averynorris/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj",
"projectName": "Awperative",
"projectPath": "/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj",
"packagesPath": "/Users/averynorris/.nuget/packages/",
"outputPath": "/Users/averynorris/RiderProjects/Awperative/Awperative/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/Users/averynorris/.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": "10.0.100"
},
"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.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"
}
}
}
}

View File

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

View File

@@ -1 +0,0 @@
"restore":{"projectUniqueName":"/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj","projectName":"Awperative","projectPath":"/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj","outputPath":"/Users/averynorris/RiderProjects/Awperative/Awperative/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":{"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.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"}}

View File

@@ -1 +0,0 @@
17706725730840864

View File

@@ -1 +0,0 @@
17706725730840864

View File

@@ -1,6 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Awperative", "Awperative\Awperative.csproj", "{0130E4FD-B03B-4A9F-8431-B602C98BE466}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AwperativeKernel", "AwperativeKernel\AwperativeKernel.csproj", "{0130E4FD-B03B-4A9F-8431-B602C98BE466}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -0,0 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;
&lt;Assembly Path="/Users/averynorris/Programming/Test/Awperative/Awperative/bin/Debug/net8.0/Awperative.dll" /&gt;
&lt;/AssemblyExplorer&gt;</s:String></wpf:ResourceDictionary>

View File

@@ -2,10 +2,9 @@
<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>
<PackageReference Include="OpenTK" Version="5.0.0-pre.15" />
</ItemGroup>
</Project>

View File

View File

@@ -0,0 +1,230 @@
using System.Collections.Generic;
using System.Collections.Immutable;
namespace AwperativeKernel;
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];
}
/// <summary>
/// Creates a new Scene
/// </summary>
/// <param name="__name">Name of the Scene</param>
public Scene CreateScene(string __name) => Awperative.CreateScene(__name);
/// <summary>
/// Finds a scene.
/// </summary>
/// <param name="__name">Name of the Scene</param>
/// <returns></returns>
public Scene GetScene(string __name) => Awperative.GetScene(__name);
/// <summary>
/// Destroys a Scene forever
/// </summary>
/// <param name="__scene"> Target scene</param>
public void RemoveScene(Scene __scene) => Awperative.CloseScene(__scene);
/// <summary>
/// Destroys a Scene forever
/// </summary>
/// <param name="__name">Name of the Scene</param>
public void RemoveScene(string __name) => Awperative.CloseScene(__name);
}

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,528 @@
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
namespace AwperativeKernel;
/// <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

@@ -1,12 +1,46 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
namespace Awperative;
namespace AwperativeKernel;
public static partial class Debug
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>

View File

@@ -1,5 +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
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,106 @@
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
namespace AwperativeKernel;
/// <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>
/// 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"> Name of the Scene</param>
/// <returns></returns>
public static bool ContainsScene(string __name) => _scenes.Any(scene => scene.Name == __name);
/// <summary>
/// Closes a Scene
/// </summary>
/// <param name="__scene"> Scene to close</param>
public static void CloseScene(Scene __scene) => Scenes.Remove(__scene);
/// <summary>
/// Closes a Scene
/// </summary>
/// <param name="__name"> Name of the scene</param>
public static void CloseScene(string __name) => Scenes.Remove(GetScene(__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,60 @@
using System.ComponentModel;
using System.Linq;
using OpenTK;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.Desktop;
namespace AwperativeKernel;
/// <summary>
/// Base class of Awperative. Carries events from MonoGame into scenes and hooks.
/// </summary>
/// <author> Avery Norris </author>
public sealed class Base() : GameWindow(GameWindowSettings.Default, new NativeWindowSettings() { })
{
/// <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 OnLoad() { 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 OnUpdateFrame(FrameEventArgs __args) { foreach(Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainUpdate(); base.OnUpdateFrame(__args); }
/// <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 OnRenderFrame(FrameEventArgs __args) { foreach(Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainDraw(); base.OnRenderFrame(__args); }
/// <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 OnClosing(CancelEventArgs __args) { foreach (Scene scene in Awperative.Scenes.ToList()) if(scene.Enabled) scene.ChainUnload(); base.OnClosing(__args); }
}

View File

@@ -0,0 +1,25 @@
namespace AwperativeKernel;
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,30 @@
# Awperative V1.0!
### Made by Avery Norris!
---
This is the very **first official** development 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.
---
# Awperative V1.1
### Feb 17th 2026
---
Awperative is officially moved to Open TK!

View File

@@ -0,0 +1,173 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"AwperativeKernel/1.0.0": {
"dependencies": {
"MonoGame.Framework.DesktopGL": "3.8.4.1"
},
"runtime": {
"AwperativeKernel.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": {
"AwperativeKernel/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

@@ -1,20 +1,20 @@
{
"format": 1,
"restore": {
"/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj": {}
"/home/avery/Programming/Awperative/Awperative/Awperative.csproj": {}
},
"projects": {
"/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj": {
"/home/avery/Programming/Awperative/Awperative/Awperative.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj",
"projectUniqueName": "/home/avery/Programming/Awperative/Awperative/Awperative.csproj",
"projectName": "Awperative",
"projectPath": "/Users/averynorris/RiderProjects/Awperative/Awperative/Awperative.csproj",
"packagesPath": "/Users/averynorris/.nuget/packages/",
"outputPath": "/Users/averynorris/RiderProjects/Awperative/Awperative/obj/",
"projectPath": "/home/avery/Programming/Awperative/Awperative/Awperative.csproj",
"packagesPath": "/home/avery/.nuget/packages/",
"outputPath": "/home/avery/Programming/Awperative/Awperative/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": {
@@ -64,11 +64,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": {
@@ -76,7 +76,7 @@
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/10.0.102/PortableRuntimeIdentifierGraph.json"
"runtimeIdentifierGraphPath": "/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json"
}
}
}

View File

@@ -4,12 +4,12 @@
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/Users/averynorris/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/Users/averynorris/.nuget/packages/</NuGetPackageFolders>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/avery/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/avery/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/Users/averynorris/.nuget/packages/" />
<SourceRoot Include="/home/avery/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,83 @@
{
"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": {
"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"
}
}
}
}
}

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,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />

View File

@@ -13,7 +13,7 @@ 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+221a768384535c7c1db461439acf325320cebd56")]
[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")]

View File

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

View File

@@ -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/Awperative/Awperative/
build_property.ProjectDir = /home/avery/Programming/Awperative/Awperative/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0

View File

@@ -0,0 +1 @@
c7dc8b93be48955f50d651d9fc41697472d7005471fa74c204470fc68053332a

View File

@@ -18,7 +18,6 @@
/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.sourcelink.json
/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

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+abbfe285b60980c87843f0d8d7b4ea19917da2a8")]
[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 @@
afcbbfcb5273145965d51705620a76d1fee510766d5b39f039949033afa2aa6e

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 =

View File

@@ -0,0 +1 @@
8ec553de34db90589bbf9af1b072687839f0d55b05f58bc6b36b3fe0aa05bceb

View File

@@ -0,0 +1,12 @@
/home/avery/Programming/Awperative/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.deps.json
/home/avery/Programming/Awperative/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.dll
/home/avery/Programming/Awperative/AwperativeKernel/bin/Debug/net8.0/AwperativeKernel.pdb
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.AssemblyReference.cache
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.GeneratedMSBuildEditorConfig.editorconfig
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfoInputs.cache
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.AssemblyInfo.cs
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.csproj.CoreCompileInputs.cache
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.dll
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/refint/AwperativeKernel.dll
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/AwperativeKernel.pdb
/home/avery/Programming/Awperative/AwperativeKernel/obj/Debug/net8.0/ref/AwperativeKernel.dll

Binary file not shown.

Binary file not shown.

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