encompass-cs-docs/content/concepts/component.md

1.4 KiB

title date weight
Component 2019-05-22T12:51:29-07:00 5

A Component is a collection of related data.

To define a Component, declare a struct which implements the IComponent interface.

using Encompass;
using System.Numerics;

public struct VelocityComponent : IComponent {
    public Vector2 velocity;
}

Components are attached to Entities with the SetComponent method.

using Encompass;

...

var worldBuilder = new WorldBuilder();
var entity = worldBuilder.CreateEntity();
worldBuilder.SetComponent(entity, new VelocityComponent { velocity = Vector2.Zero });

SetComponent can also be used from within an Engine. We will talk more about this later.

Components are always structs, meaning they follow value-type semantics. If you are used to working with classes you might find this confusing. One major point of difference is that value types are copied rather that passed by reference by default.

You can read more about value types here: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-types

If you use them idiomatically, you don't have to worry about them creating garbage collection pressure, so this is a big win for performance when working in C#.

{{% notice warning %}} Components should never reference other Components directly. This breaks the principle of loose coupling. You will regret it if you do this. {{% /notice %}}