Beispiel #1
0
        public EntityInternal Clone(string name, EntityInternal entity, EntityBuilder entityBuilder)
        {
            entityBuilder.SetName(name);
            if (entity.TemplateAccessor.IsPresent())
            {
                TemplateAccessor accessor = entity.TemplateAccessor.Get();
                if (accessor != null)
                {
                    TemplateDescription templateDescription = accessor.TemplateDescription;
                    entityBuilder.SetTemplate(templateDescription.TemplateClass);
                    if (accessor.HasConfigPath())
                    {
                        entityBuilder.SetConfig(accessor.ConfigPath);
                    }
                    else
                    {
                        YamlNode yamlNode = accessor.YamlNode;
                        if (yamlNode != null)
                        {
                            entityBuilder.SetTemplateYamlNode(yamlNode);
                        }
                    }
                }
            }
            EntityInternal internal2 = entityBuilder.Build(true);

            foreach (Type type in entity.ComponentClasses)
            {
                if (!ReferenceEquals(type, this.newEntityComponentType))
                {
                    internal2.AddComponent(entity.GetComponent(type));
                }
            }
            return(internal2);
        }
 private void AutoAddComponents(EntityInternal newEntity, TemplateDescription templateDescription)
 {
     foreach (Type type in templateDescription.GetAutoAddedComponentTypes())
     {
         Component component = !typeof(GroupComponent).IsAssignableFrom(type) ? newEntity.CreateNewComponentInstance(type) : GroupRegistry.FindOrCreateGroup(type, newEntity.Id);
         newEntity.AddComponent(component);
     }
 }