using static gaemstone.Flecs.Core; namespace gaemstone.ECS; public abstract class EntityBase { public abstract Universe Universe { get; } public abstract TReturn Add(Identifier id); public abstract TReturn Remove(Identifier id); public abstract bool Has(Identifier id); public abstract T Get(); public abstract T? MaybeGet() where T : unmanaged; public abstract T? MaybeGet(T _ = null!) where T : class; public abstract ref T GetMut() where T : unmanaged; public abstract ref T GetRefOrNull() where T : unmanaged; public abstract ref T GetRefOrThrow() where T : unmanaged; public abstract void Modified(); public abstract TReturn Set(in T value) where T : unmanaged; public abstract TReturn Set(T obj) where T : class; public TReturn Add(string symbol) => Add(Universe.LookupSymbolOrThrow(symbol)); public TReturn Add() => Add(Universe.LookupOrThrow(typeof(T))); public TReturn Add(Entity relation, Entity target) => Add(Identifier.Pair(relation, target)); public TReturn Add(Entity target) => Add(Universe.LookupOrThrow(), target); public TReturn Add() => Add(Universe.LookupOrThrow(), Universe.LookupOrThrow()); public TReturn Remove(string symbol) => Remove(Universe.LookupSymbolOrThrow(symbol)); public TReturn Remove() => Remove(Universe.LookupOrThrow(typeof(T))); public TReturn Remove(Entity relation, Entity target) => Remove(Identifier.Pair(relation, target)); public TReturn Remove(Entity target) => Remove(Universe.LookupOrThrow(), target); public TReturn Remove() => Remove(Universe.LookupOrThrow(), Universe.LookupOrThrow()); public bool Has(string symbol) => Has(Universe.LookupSymbolOrThrow(symbol)); public bool Has() => Has(Universe.LookupOrThrow(typeof(T))); public bool Has(Entity relation, Entity target) => Has(Identifier.Pair(relation, target)); public bool Has(Entity target) => Has(Universe.LookupOrThrow(), target); public bool Has() => Has(Universe.LookupOrThrow(), Universe.LookupOrThrow()); public TReturn ChildOf(Entity parent) => Add(parent); public TReturn ChildOf() => Add(); public TReturn Disable() => Add(); public TReturn Enable() => Remove(); public bool IsDisabled => Has(); }