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. /// Entity for storing global game state and configuration.
/// Parameters can use <see cref="GameAttribute"/> to source this entity. /// Parameters can use <see cref="GameAttribute"/> to source this entity.
/// </summary> /// </summary>
[Entity] [Entity, Add<Game>]
public struct Game { } public struct Game { }
/// <summary> Equivalent to <see cref="SourceAttribute{Game}"/>. </summary> /// <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); var builder = path.IsAbsolute ? Universe.New(path) : Entity.NewChild(path);
if (!type.Has<PrivateAttribute>()) builder.Symbol(path.Name); 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(); var entity = builder.Build();
if (type.Has<SingletonAttribute>()) EntityRef Lookup(Type toLookup)
entity.Add(entity); => (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>()) if (type.Has<SingletonAttribute>()) entity.Add(entity);
entity.CreateComponent(proxyType); if (type.Has<ComponentAttribute>()) entity.CreateComponent(proxyType);
else else entity.CreateLookup(proxyType);
entity.CreateLookup(proxyType);
} }
} }

Loading…
Cancel
Save