public EntityNode Create(EntityNode parent = null) { Assert.IsTrue(null == parent || this == parent.Graph); var entity = Registry.CreateEntity( new UTinyId(System.Guid.NewGuid()), GetUniqueName((parent?.Children.Select(c => c.Entity) ?? Roots.Select(r => r.Entity)), "Entity")); var entityRef = (UTinyEntity.Reference)entity; var entityGroup = EntityGroupRef.Dereference(Registry); Assert.IsNotNull(entityGroup); entity.EntityGroup = entityGroup; entityGroup.AddEntityReference(entityRef); entity.AddComponent(Registry.GetTransformType()); var view = CreateLink(entity); if (null != parent) { view.transform.SetParent(parent.Entity.Dereference(Registry).View.transform, false); } var node = new EntityNode { Entity = entityRef, Graph = this }; node.Graph.Add(node, parent); return(node); }
public EntityNode CreateFromExisting(Transform t, Transform parent) { var entity = Registry.CreateEntity( new UTinyId(System.Guid.NewGuid()), t.name); var entityRef = (UTinyEntity.Reference)entity; var entityGroupRef = EntityGroupRef.Dereference(Registry); Assert.IsNotNull(entityGroupRef); entity.EntityGroup = entityGroupRef; entityGroupRef.AddEntityReference(entityRef); entity.AddComponent(Registry.GetTransformType()); entity.View = t.GetComponent <UTinyEntityView>(); CreateLink(entity); var node = new EntityNode { Entity = entityRef, Graph = this }; node.Graph.Add(node); if (parent) { var parentview = parent.GetComponent <UTinyEntityView>(); Assert.IsNotNull(parentview); var parentNode = FindNode((UTinyEntity.Reference)parentview.EntityRef.Dereference(parentview.Registry)); node.SetParent(parentNode as EntityNode); } return(node); }
public void SyncFromUTiny() { Roots.Clear(); StaticEntities.Clear(); var cache = new Dictionary <UTinyEntity, EntityNode>(); var entityGroup = EntityGroupRef.Dereference(Registry); Assert.IsNotNull(entityGroup); foreach (var entityRef in entityGroup.Entities) { var entity = entityRef.Dereference(Registry); if (null == entity) { Debug.LogWarning($"SceneGraph failed to load entity Name=[{entityRef.Name}] Id=[{entityRef.Id}]"); continue; } if (entity.HasTransform()) { var node = new EntityNode() { Entity = entityRef, Graph = this }; cache[entity] = node; EntityNode parentNode = null; var parent = entity.Parent(); if (UTinyEntity.Reference.None.Id == parent.Id) { Roots.Add(node); continue; } if (cache.TryGetValue(parent.Dereference(Registry), out parentNode)) { node.Parent = parentNode; parentNode.Children.Add(node); } } else { StaticEntities.Add(new StaticEntityNode { Entity = entityRef, Graph = this }); } } }
public IEntityNode CreateStatic() { var entity = Registry.CreateEntity(new UTinyId(System.Guid.NewGuid()), GetUniqueName(StaticEntities.Select(e => e.Entity), "Entity")); var entityRef = (UTinyEntity.Reference)entity; CreateLink(entity); var entityGroup = EntityGroupRef.Dereference(Registry); Assert.IsNotNull(entityGroup); entityGroup.AddEntityReference(entityRef); var node = new StaticEntityNode { Entity = entityRef, Graph = this }; node.Graph.Add(node); return(node); }
private void CommitToUTiny() { var entityRefs = Pooling.ListPool <UTinyEntity.Reference> .Get(); try { GetOrderedEntityList(entityRefs); var entityGroup = EntityGroupRef.Dereference(Registry); Assert.IsNotNull(entityGroup); entityGroup.ClearEntityReferences(); foreach (var entityRef in entityRefs) { entityGroup.AddEntityReference(entityRef); } } finally { Pooling.ListPool <UTinyEntity.Reference> .Release(entityRefs); } }