コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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
                    });
                }
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }