DaveGreen.ShapeEngine
1.0.2
Prefix Reserved
See the version list below for details.
dotnet add package DaveGreen.ShapeEngine --version 1.0.2
NuGet\Install-Package DaveGreen.ShapeEngine -Version 1.0.2
<PackageReference Include="DaveGreen.ShapeEngine" Version="1.0.2" />
paket add DaveGreen.ShapeEngine --version 1.0.2
#r "nuget: DaveGreen.ShapeEngine, 1.0.2"
// Install DaveGreen.ShapeEngine as a Cake Addin #addin nuget:?package=DaveGreen.ShapeEngine&version=1.0.2 // Install DaveGreen.ShapeEngine as a Cake Tool #tool nuget:?package=DaveGreen.ShapeEngine&version=1.0.2
My custom-made engine based on the great Raylib Framework. The Main focus is being performant and only using draw functions instead of textures.
When using Shape Engine everything from Raylib is available as well. (Raylib Examples, Raylib Cheatsheet)
Shape Engine´s examples are available on Itch as well and it is a great way to support me 😉
You are free to use Shape Engine or any part of Shape Engine for your own projects, but keep in mind that Shape Engine was designed to help me with my specific game dev needs. Nevertheless I am looking forward to creations that Shape Engine made possible 😃
Release Trailer
Development Process
The Main Branch contains the current development stage. You can follow the development process here:
Installation / How to Use
There are multiple ways to use Shape Engine:
- Create a new solution & project and download Shape Engine from the Nuget manager. (Recommended)
- Clone or fork the repository and add new projects to the solution. You then can reference the Shape Engine project and start working on your game. The advantages are that you can easily change things in Shape Engine and everything updates automatically in your own project.
- Create a new solution & project in a .net IDE. (Visual Studio / JetBrains Rider for example). Download or fork ShapeEngine and either create a local nuget package or build the solution to create all necessary dll files.
- [Using a local Nuget Package] Create a folder on your machine called something like “Local Nuget Packages” and copy the ShapeEngine Nuget package that you created to this folder. (You can also add the Shape Engine Nuget package directly to your Project). Now you need to create a new Package source in the Nuget Manager that points to your “Local Nuget Packages” Folder. This source can be used in your Nuget Manager to find and install the Shape Engine Nuget Package.
- You manually copy all needed DLL files to your project. You need the following DLLs: Clipper2Lib, Raylib-Cs, Microsoft.Toolkit.HighPerformance, Shape Engine Core, Raylib. All DLL files except Raylib can be anywhere in your projects folder hierarchy. The Raylib DLL must be on the root level of your project. You need to select the right Raylib DLL for your operating system. Now just add a reference for all DLLs except the Raylib DLL and you are done. On MacOS you need to do the same step except using the .dylib file instead of the raylib DLL. You need to set the property “Copy if Newer” to true on the .dylib file. Then everything should work.
- Create a new solution & project and just add the Shape Engine Core DLL to your project and reference it. Now you need to download the right version of the Raylib_CsLo & Clipper2 Nuget packages. The releases on GitHub will state which versions were used.
Minimal Project Setup
using System.Drawing;
using ShapeEngine.Color;
using ShapeEngine.Core;
using ShapeEngine.Core.Structs;
using ShapeEngine.Lib;
namespace ShapeEngineProject;
public static class Program
{
public static void Main(string[] args)
{
var gameSettings = new GameSettings()
{
DevelopmentDimensions = new Dimensions(1920, 1080),
MultiShaderSupport = false
};
var game = new MyGameClass(gameSettings, WindowSettings.Default);
game.Run();
}
}
public class MyGameClass : Game
{
public MyGameClass(GameSettings gameSettings, WindowSettings windowSettings) : base(gameSettings, windowSettings) { }
protected override void DrawGame(ScreenInfo game)
{
game.Area.Draw(new ColorRgba(Color.DarkOliveGreen));
game.Area.DrawLines(12f, new ColorRgba(Color.AntiqueWhite));
game.MousePos.Draw(24f, new ColorRgba(Color.Lime), 36);
}
}
Examples
You can download the newest builds of the Example Project on Itch io. You can clone the repo and inspect the example projects there as well.
- Examples are simple scenes that focus on one specific area or feature of Shape Engine.
- Examples showcase the various capabilities of Shape Engine, allowing users to explore various features.
- The examples cover all major features of Shape Engine, ensuring that users can grasp its full potential.
Features
In general my goal is to provide the most relevant system a game dev needs without adding a solution for every possible problem.
- Polygon Fracturing
- Delaunay Triangulation
- Text & Font System
- Pathfinding
- UI System
- Collision System
- Audio & Music
- Savegame System
- Color Palettes
- Input System (Keyboard, Mouse, Gamepad)
- Camera System
Documentation & Getting Started
Right now there is not much information about how to use Shape Engine. The repository contains an Examples Project. It shows you a lot of what is possible and how it is done and should help you until there is some proper documentation.
Currently I don't have the time or the resources to create proper documentation for Shape Engine. If enough people are interested in it this might change. Any help in this direction would be greatly appreciated!
Roadmap
You will always find the roadmaps on ShapeEngine´s GitHub Discussion page here.
Dependencies
I am just using the Raylib Cs c# bindings and the Cipper2 library for polygon clipping.
If you use the nuget manager to download Shape Engine as a nuget package you don't have to take care of any dependencies, because they will be downloaded automatically.
Limitations
There is no physics system because I don´t need one and would´t know how to make one. There is complete collision system but the collision response is up to you. You can also use raylibs physics system.
History
I made Shape Engine because I wanted to help myself make games with a specific art style and certain limitations. At first, it started out with some helper scripts but now it is a relatively sophisticated system to make games with raylib. Certain parts of the basic game loop are inspired by Bytepath and other things I already used in games that I made myself (especially Fracture Hell). Feel free to use any single part if you don´t want to use the whole package.
Contact
If you have an issue, or a suggestion for a new feature GitHub is the best way to get in contact with me.
On these platforms you can follow the development process of Shape Engine, get in contact with me and always stay up date.
Linktree
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. 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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Initially I just wanted to overhaul the input and audio system of Shape Engine. This turned into a year long complete rework . I think there is almost no area of Shape Engine that did not get changed or removed. I took some inspiration from other frameworks (Monogame mostly) on how to setup the basic framework or gameloop. I simplified it and made it more user friendly in general, and removed unnecessary steps.
One other big part was the new shape and collision system. Now Shape Engine supports a lot of shapes (Segment, Circle, Triangle, Rect, Quad, Polygon, Polyline) and collisions/ intersections work between all of them. The different shapes are all encapsulated in there own struct and I added a lot of helpful functions to them. You can intersect shapes and get all there intersection points with normals, or just overlap them, check if one shape contains the other, or even project shapes along a vector.
Reworking the UI system was really hard. I think it took me 3 iterations to get to the point where it is now. I used Godot’s Control Node system as inspiration for my system and works great now. It is simple enough and it still can do everything I need it to. The UI system now consists of three main parts:
- Control Node (a button for instance)
- Control Node Container (can contain any number of control nodes (even containers) and updates & draws them and can also neatly align them in various ways)
- Control Node Navigator (Navigates through all active & visible control nodes via input)
There is a lot more that has changed since the alpha version of Shape Engine (over 600 commits) and too much to write it down here but I think it gives you a good glance at the changes.
I think I got relatively close to my goal and once I use Shape Engine for my next game I will find out really quick what areas still need some work.
Changed / Overhauled:
- Input System
- Audio System
- Savegame System
- Collision System
- Color System
- UI System
- Text & Font System
- Gameloop
- Drawing System
- Screen System
- Randomization System
New:
- Pathfinding System
- Color Palettes
- Shapes