From 66724e4100685fe9e95e5b93115eb7a0a9fd1a8e Mon Sep 17 00:00:00 2001 From: copygirl Date: Wed, 16 Nov 2022 22:17:44 +0100 Subject: [PATCH] Support [Add] for type T --- src/gaemstone/ECS/Game.cs | 2 +- src/gaemstone/ECS/Universe+Modules.cs | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/gaemstone/ECS/Game.cs b/src/gaemstone/ECS/Game.cs index 608458b..4ab62a9 100644 --- a/src/gaemstone/ECS/Game.cs +++ b/src/gaemstone/ECS/Game.cs @@ -6,7 +6,7 @@ namespace gaemstone.ECS; /// Entity for storing global game state and configuration. /// Parameters can use to source this entity. /// -[Entity] +[Entity, Add] public struct Game { } /// Equivalent to . diff --git a/src/gaemstone/ECS/Universe+Modules.cs b/src/gaemstone/ECS/Universe+Modules.cs index 71f0da6..b6cd235 100644 --- a/src/gaemstone/ECS/Universe+Modules.cs +++ b/src/gaemstone/ECS/Universe+Modules.cs @@ -189,20 +189,18 @@ internal class ModuleInfo var builder = path.IsAbsolute ? Universe.New(path) : Entity.NewChild(path); if (!type.Has()) builder.Symbol(path.Name); - foreach (var attr in type.GetMultiple()) - builder.Add(Universe.LookupOrThrow(attr.Entity)); - foreach (var attr in type.GetMultiple()) - builder.Add(Universe.LookupOrThrow(attr.Relation), Universe.LookupOrThrow(attr.Target)); - var entity = builder.Build(); - if (type.Has()) - entity.Add(entity); + EntityRef Lookup(Type toLookup) + => (type != toLookup) ? Universe.LookupOrThrow(toLookup) : entity; + foreach (var attr in type.GetMultiple()) + entity.Add(Lookup(attr.Entity)); + foreach (var attr in type.GetMultiple()) + entity.Add(Lookup(attr.Relation), Lookup(attr.Target)); - if (type.Has()) - entity.CreateComponent(proxyType); - else - entity.CreateLookup(proxyType); + if (type.Has()) entity.Add(entity); + if (type.Has()) entity.CreateComponent(proxyType); + else entity.CreateLookup(proxyType); } }