-
Notifications
You must be signed in to change notification settings - Fork 37
Systems API
genar edited this page Jan 18, 2023
·
2 revisions
Worlds, queries and entities can be organized and structured through the system API. Systems offer a number of functions that support this, systems can also be grouped.
The system API can also be used completely without the source generator.
In the following example a small system to update the position of entities to demonstrate the API more closely:
// Components ( ignore the formatting, this saves space )
public struct Position{ float X, Y };
public struct Velocity{ float Dx, Dy };
// BaseSystem provides several usefull methods for interacting and structuring systems
public class MovementSystem : BaseSystem<World, float>{
private QueryDescription _desc = new QueryDescription().WithAll<Position, Velocity>();
public MovementSystem(World world) : base(world) {}
// Can be called once per frame
public override void Update(in float deltaTime)
{
// Run query, can also run multiple queries inside the update
World.Query(in _desc, (ref Position pos, ref Velocity vel) => {
pos.X += vel.X;
pos.Y += vel.Y;
});
}
}
public class Game
{
public static void Main(string[] args)
{
var deltaTime = 0.05f; // This is mostly given by engines, frameworks
// Create a world and a group of systems which will be controlled
var world = World.Create();
var _systems = new Group<float>(
new MovementSystem(world), // Run in order
new MyOtherSystem(...),
...
);
_systems.Initialize(); // Inits all registered systems
_systems.BeforeUpdate(in deltaTime); // Calls .BeforeUpdate on all systems ( can be overriden )
_systems.Update(in deltaTime); // Calls .Update on all systems ( can be overriden )
_systems.AfterUpdate(in deltaTime); // Calls .AfterUpdate on all System ( can be overriden )
_systems.Dispose(); // Calls .Dispose on all systems ( can be overriden )
}
}