A full-fledged cross-platform 2D Game Engine.
- Install the
metoolcommand-line tool. - Reference the Project/Assembly.
- Get an instance of the GameEngine.
var gameEngine = GameContext.GetGameEngine();
- Create an initializer to load initial and additional game assets.
var gameEngine = GameContext.GetGameEngine(); gameEngine.AddInitializer(() => { // do stuff return false; // return true if error occured in initializer. });
- Initialize the engine by calling
gameEngine.Initialize()then start it by callinggameEngine.Run().var gameEngine = GameContext.GetGameEngine(); gameEngine.AddInitializer(() => { // do stuff return false; // return true if error occured in initializer. }); gameEngine.Initialize() gameEngine.Run();
- Create a
./Assets/.indexfilein the root directory.
This file will be used for defining asset folders that will be referenced by the game.Will mark the foldersAudio Sprites Scenes./Assets/Audio,./Assets/Sprites, and./Assets/Scenesas game assets. - Run the
metool packcommand on the./Assetsdirectory.This will produce ametool pack ./Assets
Assets.meafile that contains the assets specified by your.indexfile. - Run
dotnet runto run the project.
MiniEngine uses a simple ECS architecture.
Game objects are usually defined as an Entity that may contain one or many Component.
Both of these objects/classes are ideally data-only. Behavior and logic are done by a System that act on its corresponding Component.
These Entities are then contained in a Scene.
Scenes are functionally equivalent to a game world or room.
You can switch scenes as needed for switching between levels or ui screens.
MiniEngine supports the use of a packed asset file that acts as a read-only virtual file system.
- Build and install the
MiniEngine.Tools.CLIproject and install as a dotnet tool. - Create a
.indexfilefile in your project directory. Files and folders specified in this file are set to be packed by the CLI tool. - Run
metool packon the project directory. The tool will produce aassets.meafile that contains your game assets. - Place and include this file on your project's output directory.
- Reference a file by calling
Resources.GetResource(string path). You may also opt for implicit conversion via strings when calling functions that usesMemoryResource.
Runnable with basic functionality included.
- Create Basic Unit Structures
SizeVector2Color
- Create BaseEngine Structure
Create engine init and cleanupCreate engine loop
- Create Entity Component System
Create System Service (Register & Execute)Support user-defined systems
Add wiring via reflection- Implement Basic Components and Systems
Add Transform and TransformSystemAdd Motion and MotionSystemAdd Sprite and DrawSystem
- Implement Complex Components and Systems
- Add PhysicsBehavior and PhysicsSystem
Add Script and ScriptSystem- Design a scripting API
- Create Windowing System
Implement window creation and respect engine configuration- Add additional window configuration methods to be ran at runtime
- Create Resource Manager
Create packed file formatCreate index format
Create loader to load resources into memoryCreate texture cache- Create font loader
- Create Graphics Abstraction Layer
- Add Primitive Draw Functions
- Rectangle
- Ellipse
- Cicle
Pixel- Line
- Curved Line
- Add Sprite Draw Functions
Draw- Draw Spliced
- Add Primitive Draw Functions
- Create Documentation
- Create Example Projects
- Publish to NuGet