Compare commits

...

5 Commits

  1. 3
      src/gaemstone.ECS/Entity.cs
  2. 3
      src/gaemstone.ECS/Internal/Iterator.cs
  3. 2
      src/gaemstone.ECS/Iterator.cs
  4. 4
      src/gaemstone.ECS/Rule.cs
  5. 2
      src/gaemstone.ECS/Term.cs
  6. 13
      src/gaemstone.ECS/World+Bare.cs
  7. 7
      src/gaemstone.ECS/World.cs

@ -76,7 +76,8 @@ public unsafe readonly partial struct Entity<TContext>
public Entity<TContext> ChildOf(Entity parent)
=> Add(FlecsBuiltIn.ChildOf, parent);
public bool IsDisabled => Has(FlecsBuiltIn.Disabled);
public bool IsDisabled => Has(FlecsBuiltIn.Disabled);
public bool IsEnabled => !Has(FlecsBuiltIn.Disabled);
public Entity<TContext> Disable() => Add(FlecsBuiltIn.Disabled);
public Entity<TContext> Enable() => Remove(FlecsBuiltIn.Disabled);

@ -55,6 +55,9 @@ public unsafe class Iterator
public virtual bool Next()
=> ecs_iter_next(Handle);
public bool Any()
{ using (this) return Next(); }
public Entity First()
=> new(ecs_iter_first(Handle));

@ -29,6 +29,8 @@ public unsafe class Iterator<TContext> : Iterator
public new Iterator<TContext> SetVar(Variable var, Entity entity)
=> (Iterator<TContext>)base.SetVar(var, entity);
public new Entity<TContext>? First()
=> Entity<TContext>.GetOrNull(World, base.First());
public new IEnumerable<Entity<TContext>> GetAllEntities()
=> base.GetAllEntities().Select(e => Entity<TContext>.GetOrInvalid(World, e));

@ -52,9 +52,9 @@ public unsafe class Rule<TContext>
internal VariableCollection(ecs_rule_t* handle)
{
// Find the $This variable, if the rule has one.
// Find the $this variable, if the rule has one.
var thisIndex = ecs_filter_find_this_var(ecs_rule_get_filter(handle));
if (thisIndex >= 0) _variables.Add(new(thisIndex, "This"));
if (thisIndex >= 0) _variables.Add(new(thisIndex, "this"));
// Find all the other "accessible" variables.
var count = ecs_rule_var_count(handle);

@ -61,7 +61,7 @@ public enum TermOperKind
public class TermId
{
public static TermId This { get; } = new("$This");
public static TermId This { get; } = new("$this");
public Entity Id { get; }
public string? Name { get; }

@ -17,7 +17,9 @@ public unsafe struct World
public World(ecs_world_t* handle)
=> Handle = handle;
public World(params string[] args)
/// <summary> Initializes a new Flecs world. </summary>
/// <param name="minimal"> If true, doesn't automatically import built-in modules. </param>
public World(bool minimal = false)
{
[UnmanagedCallersOnly]
static void Abort() => throw new FlecsAbortException();
@ -27,14 +29,7 @@ public unsafe struct World
api.abort_ = new FnPtr_Void { Pointer = &Abort };
ecs_os_set_api(&api);
if (args?.Length > 0) {
var ptr = Runtime.CStrings.CStringArray(args);
Handle = ecs_init_w_args(args.Length, ptr);
for (var i = 0; i < args.Length; i++)
Marshal.FreeHGlobal(ptr[i]);
} else {
Handle = ecs_init();
}
Handle = minimal ? ecs_mini() : ecs_init();
}
public bool Progress(TimeSpan delta)

@ -15,8 +15,11 @@ public unsafe struct World<TContext>
public World(World value)
=> Value = value;
public World(params string[] args)
: this(new World(args)) { }
/// <summary> Initializes a new Flecs world. </summary>
/// <param name="minimal"> If true, doesn't automatically import built-in modules. </param>
public World(bool minimal = false)
: this(new World(minimal)) { }
public bool Progress(TimeSpan delta) => Value.Progress(delta);
public void Quit() => Value.Quit();

Loading…
Cancel
Save