ShardSoft.MiCore 1.0.0

dotnet add package ShardSoft.MiCore --version 1.0.0                
NuGet\Install-Package ShardSoft.MiCore -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ShardSoft.MiCore" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ShardSoft.MiCore --version 1.0.0                
#r "nuget: ShardSoft.MiCore, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ShardSoft.MiCore as a Cake Addin
#addin nuget:?package=ShardSoft.MiCore&version=1.0.0

// Install ShardSoft.MiCore as a Cake Tool
#tool nuget:?package=ShardSoft.MiCore&version=1.0.0                

Core library for the MiFramework.

Product Compatible and additional computed target framework versions.
.NET net5.0 is compatible.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on ShardSoft.MiCore:

Package Downloads
ShardSoft.MiInput

A basic input manager for use with SFML.Net and XInput.

ShardSoft.MiGfx

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 951 5/7/2021

# Version 1.0.0
- The supplied project and release binaries now target .Net 5 and not the .Net Framework.
- Updated coding style throughout to use newer C# features brought with the change to .Net 5.
- `MiJob`, `JobList` and `JobManager` have been removed temporarily as the async functionality is not stable.

# Version 0.11.0
- Fixed issue where `Namable.AsValid(string,char)` was not using the assigned replacement character and always used an underscore.
- Minor performance improvements by using a `for` rather than `foreach` loop in certain cases.

# Version 0.10.0
- Added generic `TypeRegister` class that is used for registering string IDs to types and using the IDs to create objects of the registered types. `ComponentRegister` inherits from this.
- Added `SubscribeEvents(Window)` and `UnsubscribeEvents(Window)` virtual methods to `MiObject` to replace `MiComponent` and `MiEntity`'s `TextEntered(TextEventArgs)` method and expand for other events.
- `MiComponent` now contains virtual functions `OnAdd()` and `OnRemove()` that are triggered when the component is added to and removed from an entity; these are intended to initialize the new parent entities' other components.
- Added virtual `Refresh()` method to `MiComponent` that is called before `OnUpdate(float)` for refreshing a components' visual elements without updating runtime logic. `MiEntity.Refresh()` is also included as a passthrough. This is so components and entities can be visualized without being interacted with.

# Version 0.9.1
- Fixed bug where `MiEntity.LoadFromStream(BinaryReader)` would report failure even when it succeeded.

# Version 0.9.0
- Added functionality to `MiEntity` for retrieving children by component.
- Fixed bug with `MiEntity.AddComponent` where if the component is added successfully, but adding one of the required components fails, the leftover components are not removed.
- Fixed bug where `MiNode<T>` was not saving and loading its ID in `LoadFromStream(BinaryReader)`, `SaveToStream(BinaryWriter)` and `LoadFromXml(XmlElement)`.
- Fixed bug where `MiNode<T>.ToString()` and `MiEntity.ToString()` mixed up the value for `Visible` with `Enabled`.
- `MiNode<T>` is no longer `INamable` and no longer has `Name` as `IIdentifiable<string>` with 'ID'  does the job.
- `MiNode.HasChild(string,bool)`, `MiNode.GetChild(string,bool)`, `MiNode.RemoveChild(string,bool)` and `MiNode.ReleaseChild(string,bool)` now all support path-like syntax to access children.

# Version 0.8.0
- When adding a component to an entity, its required components are now added after the component rather than before to prevent component order issues. Due to this, all `Entity.Insert*` methods have been removed.
- Removed `Paths.Executable` and `Paths.ExecutableFolder` due to unforseen reflection issues.

# Version 0.7.0
- Now `MiComponent.RequiredComponents` and `MiComponent.IncompatibleComponents` are readonly and are assigned on construction with the `MiComponent.GetRequiredComponents()` and `MiComponent.GetIncompatibleComponents()` methods respectively.
- Merged some path methods from `MiGfx`.

# Version 0.6.0
- `ComponentStack` has been merged back into `MiEntity` and the methods and properties have been renamed to show they interact with components.
- Added `MiEntity.ReleaseAllComponents()` that removes all components from an entity without disposing of them and returns an array containing them.
- Now `MiComponent` implements `IEquatable<MiComponent>` as a base for deriving classes.

# Version 0.5.0
- Changed SFML source to latest official SFML.Net repository.

# Version 0.4.0
- `MiEntity` objects now require a reference to the render window, `MiEntity.Window` to be assigned in order to contain components that need it. When setting `MiEntity.Window`, it will be applied to all child entities too.
- `MiComponent` now contains methods for handling text entered events. `TextEntered(TextEventArgs)` is to be called and passed the event args when the event happens and will then call the virtual `OnTextEntered(TextEventArgs)` which you would override to handle the event. Because of this, `MiEntity.TextEntered(TextEventArgs)` is provided to call the event on all components and all components of all children.
- `ComponentStack.Add<T>(bool)` has been renamed to `AddNew<T>(bool)` and has been replaced with `Add<T>(T, bool)` to add an object of the given type to the stack.
- Added methods `Insert(int, MiComponent, bool)`, `Insert<T>(int, T, bool)`, `InsertNew<T>(int, bool)` and 'AddRange(IEnumerable<MiComponent>, bool)` to `ComponentStack` for inserting components into perticular indicies in the stack. `AddRange(IEnumerable<MiComponent>, bool)` has also been added to easily add a range of components from a collection.

# Version 0.3.0
- `Entity`, `Component` classes have been renamed to `MiEntity` and `MiComponent`.
- Added `MiNode<T>` abstract class to provide a parent-child relationship tree of type `T` for dervied classes.
- Added both sync and async ECS job functionality. `MiJob` objects contain job delegates and info, `JobList` objects are used to manage jobs into different priorities, and a `JobManager` object contains the job lists in priority order and is designed to run the jobs in order.
- Component related functionality has been moved from `MiEntity` to a new class `ComponentStack`. An entities components are now accessed through `MiEntity.Components`.
- Now `MiObject` and `MiEntity` implement `ICloneable`, this means all classes that inherit from `Component` must return a deep copy of the object via `Clone()`. This is so that entities can be cloned without knowing the actual type of their components.
- `MiObject.Dispose()` is no longer meant to be overridden, instead override `MiObject.OnDispose()`, this ensures the object is only disposed of once.
- `MiEntity` now inherits from and implements `MiNode<MiEntity>`.
- Added `MiEntity.Release<T>()`, `MiEntity.Release(int)` and `MiEntity.Release(string)` methods for removing and extracting components without disposing of them.

# Version 0.2.0
- Removed the need for `DataT` type in `ISerializable` and removed `ISerializable.FileData`. Because of this, default behaviour for `TextSerializable.SaveToStream(StreamWriter)` will write the result of `ToString()` to the stream instead of `FileData` and `BinarySerializable.SaveToStream(BinaryWriter)` is now completely abstract.
- Added `IXmlSerializable` interface and `XmlSerializable` class for classes that are serialized and deserialized in xml files node by node.
- `MiObject.Dispose()` is now virtual rather than abstract so classes that inherit from it no longer need to implement it.
- `Component.RequiredComponents` and `Component.IncompatibleComponents` now default to null instead of an empty string array.

# Version 0.1.0
- Initial release.