コード例 #1
0
        protected override void OnUpdate()
        {
            Entities.ForEach((Image image) => {
                var texture  = image.sprite != null ? image.sprite.texture : Texture2D.whiteTexture;
                var material = image.material != null ? image.material : Canvas.GetDefaultCanvasMaterial();

                var entity   = GetPrimaryEntity(image);
                var rectSize = image.rectTransform.Int2Size();

                DstEntityManager.AddComponentData(entity, new LinkedTextureEntity  {
                    Value = GetPrimaryEntity(texture)
                });
                DstEntityManager.AddComponentData(entity, new LinkedMaterialEntity {
                    Value = GetPrimaryEntity(material)
                });
                DstEntityManager.AddComponentData(entity, new AppliedColor         {
                    Value = image.color
                });

                var spriteTexture = image.sprite;
                var spriteRes     = spriteTexture != null ?
                                    new int2(spriteTexture.texture.width, spriteTexture.texture.height) :
                                    rectSize;

                DstEntityManager.AddComponentData(entity, new DefaultSpriteResolution {
                    Value = spriteRes
                });

                var spriteData = SpriteData.FromSprite(image.sprite);
                DstEntityManager.AddComponentData(entity, spriteData);

                // TODO: Does not handle image slicing
                DstEntityManager.AddBuffer <LocalVertexData>(entity).ResizeUninitialized(4);
                DstEntityManager.AddBuffer <LocalTriangleIndexElement>(entity).ResizeUninitialized(6);

                // Mark that the image has to be built.
                DstEntityManager.AddComponent <BuildUIElementTag>(entity);

                var type = image.type;

                switch (type)
                {
                case Image.Type.Simple:
                    break;

                case Image.Type.Filled:
                    SetFill(image, entity);
                    break;

                default:
                    throw new System.NotSupportedException($"Only Simple/Filled Image types are supported so far for {image.name}");
                }

                // If the image is inactive, then we want to make sure the image gets offsetted.
                if (!image.gameObject.activeInHierarchy || !image.enabled)
                {
                    DstEntityManager.AddComponent <UpdateVertexColorTag>(entity);
                }
            });
        }
コード例 #2
0
        protected override void OnUpdate()
        {
            Entities.ForEach((Image image) => {
                TextureBin.TryLoadTextureBin("TextureBin", out TextureBin textureBin);

                var texture    = image.sprite != null ? image.sprite.texture : Texture2D.whiteTexture;
                var imageIndex = textureBin.Add(texture);

                var entity   = GetPrimaryEntity(image);
                var material = image.material != null ? image.material : Canvas.GetDefaultCanvasMaterial();
                DstEntityManager.AddComponentObject(entity, material);

                // TODO: Internally this would need a look up table...
                // DstEntityManager.AddSharedComponentData(entity, new MaterialID { Value = material.GetInstanceID() });

                var rectSize = image.rectTransform.Int2Size();

                DstEntityManager.AddComponentData(entity, new TextureKey   {
                    Value = imageIndex
                });
                DstEntityManager.AddComponentData(entity, new AppliedColor {
                    Value = image.color
                });
                DstEntityManager.AddComponentData(entity, new Dimensions   {
                    Value = rectSize
                });

                var spriteTexture = image.sprite;
                var spriteRes     = spriteTexture != null ?
                                    new int2(spriteTexture.texture.width, spriteTexture.texture.height) :
                                    rectSize;

                DstEntityManager.AddComponentData(entity, new DefaultSpriteResolution {
                    Value = spriteRes
                });

                var spriteData = SpriteData.FromSprite(image.sprite);
                DstEntityManager.AddComponentData(entity, spriteData);

                // TODO: Does not handle image slicing
                DstEntityManager.AddBuffer <MeshVertexData>(entity).ResizeUninitialized(4);
                DstEntityManager.AddBuffer <TriangleIndexElement>(entity).ResizeUninitialized(6);
            });
        }