|
|
|
using gaemstone.ECS;
|
|
|
|
|
|
|
|
namespace gaemstone.Flecs;
|
|
|
|
|
|
|
|
[Module, Path("/flecs/core")]
|
|
|
|
public static class Core
|
|
|
|
{
|
|
|
|
// Entity Tags
|
|
|
|
|
|
|
|
[Tag] public struct Name { }
|
|
|
|
[Tag] public struct Symbol { }
|
|
|
|
[Tag] public struct Alias { }
|
|
|
|
|
|
|
|
[Tag] public struct Module { }
|
|
|
|
[Tag] public struct Prefab { }
|
|
|
|
[Tag] public struct SlotOf { }
|
|
|
|
[Tag] public struct Disabled { }
|
|
|
|
[Tag] public struct Empty { }
|
|
|
|
|
|
|
|
// Can't be in a module class with the same name.
|
|
|
|
[Path("/flecs/system/System")]
|
|
|
|
[Tag] public struct System { }
|
|
|
|
|
|
|
|
// Entities
|
|
|
|
|
|
|
|
[Entity] public struct World { }
|
|
|
|
[Path("*")] public struct Wildcard { }
|
|
|
|
[Path("_")] public struct Any { }
|
|
|
|
[Entity] public struct This { }
|
|
|
|
[Path("$")] public struct Variable { }
|
|
|
|
[Entity] public struct Flag { }
|
|
|
|
|
|
|
|
// Entity Relationships
|
|
|
|
|
|
|
|
[Relation, Tag] public struct IsA { }
|
|
|
|
[Relation, Tag] public struct ChildOf { }
|
|
|
|
[Relation, Tag] public struct DependsOn { }
|
|
|
|
|
|
|
|
// Component / Relationship Properties
|
|
|
|
|
|
|
|
[Tag] public struct Transitive { }
|
|
|
|
[Tag] public struct Reflexive { }
|
|
|
|
[Tag] public struct Symmetric { }
|
|
|
|
[Tag] public struct Final { }
|
|
|
|
[Tag] public struct DontInherit { }
|
|
|
|
[Tag] public struct Tag { }
|
|
|
|
[Tag] public struct Union { }
|
|
|
|
[Tag] public struct Exclusive { }
|
|
|
|
[Tag] public struct Acyclic { }
|
|
|
|
[Relation, Tag] public struct With { }
|
|
|
|
[Tag] public struct OneOf { }
|
|
|
|
|
|
|
|
// Components
|
|
|
|
|
|
|
|
[Component]
|
|
|
|
public readonly struct Component
|
|
|
|
{
|
|
|
|
public int Size { get; }
|
|
|
|
public int Alignment { get; }
|
|
|
|
}
|
|
|
|
|
|
|
|
[Relation, Component]
|
|
|
|
public readonly struct Identifier
|
|
|
|
{
|
|
|
|
#pragma warning disable IDE0051 // Disable "unused" hint.
|
|
|
|
#pragma warning disable CS0169 // Disable "unused" warning.
|
|
|
|
#pragma warning disable CS0649 // Disable "never assigned to" warning.
|
|
|
|
private unsafe readonly void* _value;
|
|
|
|
private readonly nint _length;
|
|
|
|
private readonly ulong _hash;
|
|
|
|
private readonly ulong _indexHash;
|
|
|
|
private unsafe readonly void* _index;
|
|
|
|
#pragma warning restore
|
|
|
|
|
|
|
|
public override string? ToString() { unsafe {
|
|
|
|
if ((_value == null) || (_length == 0)) return null;
|
|
|
|
else return new UTF8View(new(_value, (int)_length)).ToString();
|
|
|
|
} }
|
|
|
|
|
|
|
|
public static implicit operator string?(Identifier id)
|
|
|
|
=> id.ToString();
|
|
|
|
}
|
|
|
|
}
|