Support [Add<T>] for type T

wip/source-generators
copygirl 2 years ago
parent 9e1ab326c7
commit 66724e4100
  1. 2
      src/gaemstone/ECS/Game.cs
  2. 20
      src/gaemstone/ECS/Universe+Modules.cs

@ -6,7 +6,7 @@ namespace gaemstone.ECS;
/// Entity for storing global game state and configuration.
/// Parameters can use <see cref="GameAttribute"/> to source this entity.
/// </summary>
[Entity]
[Entity, Add<Game>]
public struct Game { }
/// <summary> Equivalent to <see cref="SourceAttribute{Game}"/>. </summary>

@ -189,20 +189,18 @@ internal class ModuleInfo
var builder = path.IsAbsolute ? Universe.New(path) : Entity.NewChild(path);
if (!type.Has<PrivateAttribute>()) builder.Symbol(path.Name);
foreach (var attr in type.GetMultiple<AddEntityAttribute>())
builder.Add(Universe.LookupOrThrow(attr.Entity));
foreach (var attr in type.GetMultiple<AddRelationAttribute>())
builder.Add(Universe.LookupOrThrow(attr.Relation), Universe.LookupOrThrow(attr.Target));
var entity = builder.Build();
if (type.Has<SingletonAttribute>())
entity.Add(entity);
EntityRef Lookup(Type toLookup)
=> (type != toLookup) ? Universe.LookupOrThrow(toLookup) : entity;
foreach (var attr in type.GetMultiple<AddEntityAttribute>())
entity.Add(Lookup(attr.Entity));
foreach (var attr in type.GetMultiple<AddRelationAttribute>())
entity.Add(Lookup(attr.Relation), Lookup(attr.Target));
if (type.Has<ComponentAttribute>())
entity.CreateComponent(proxyType);
else
entity.CreateLookup(proxyType);
if (type.Has<SingletonAttribute>()) entity.Add(entity);
if (type.Has<ComponentAttribute>()) entity.CreateComponent(proxyType);
else entity.CreateLookup(proxyType);
}
}

Loading…
Cancel
Save