Ejemplo n.º 1
0
        private void DeactivateSkinning()
        {
            SpriteRendererDataAccessExtensions.DeactivateDeformableBuffer(spriteRenderer);

            if (spriteRenderer.sprite != null)
            {
                InternalEngineBridge.SetLocalAABB(spriteRenderer, spriteRenderer.sprite.bounds);
            }
        }
Ejemplo n.º 2
0
        protected override void OnUpdate()
        {
            var entities = m_ComponentGroup.ToEntityArray(Allocator.TempJob);
            List <SpriteSkin>      spriteSkinComponents = new List <SpriteSkin>();
            List <SpriteComponent> spriteComponents     = new List <SpriteComponent>();

            Entities.ForEach((SpriteSkin spriteSkin) => { spriteSkinComponents.Add(spriteSkin); });
            Entities.ForEach((SpriteComponent sprite) => { spriteComponents.Add(sprite); });
            var worldToLocalComponents = m_ComponentGroup.ToComponentDataArray <WorldToLocal>(Allocator.TempJob);

            for (var i = 0; i < entities.Length; ++i)
            {
                var    vertexBuffer        = EntityManager.GetBuffer <Vertex>(entities[i]);
                var    boneTransformBuffer = EntityManager.GetBuffer <BoneTransform>(entities[i]);
                var    currentSprite       = spriteComponents[i].Value;
                var    currentWorldToLocal = worldToLocalComponents[i];
                Sprite sprite     = null;
                var    entity     = entities[i];
                var    spriteSkin = spriteSkinComponents[i];

                if (spriteSkin == null)
                {
                    continue;
                }

                var spriteRenderer = spriteSkin.spriteRenderer;
                var isValid        = spriteRenderer.enabled && spriteSkin.isValid;
                var isVisible      = spriteRenderer.isVisible || spriteSkin.ForceSkinning;

                if (!isValid)
                {
                    SpriteRendererDataAccessExtensions.DeactivateDeformableBuffer(spriteRenderer);
                }
                else if (isVisible)
                {
                    spriteSkin.ForceSkinning = false;
                    sprite = spriteRenderer.sprite;
                    float4x4 worldToLocal = spriteSkin.transform.worldToLocalMatrix;

                    if (vertexBuffer.Length != sprite.GetVertexCount())
                    {
                        vertexBuffer = PostUpdateCommands.SetBuffer <Vertex>(entity);
                        vertexBuffer.ResizeUninitialized(sprite.GetVertexCount());
                    }

                    InternalEngineBridge.SetDeformableBuffer(spriteRenderer, vertexBuffer.Reinterpret <Vector3>().AsNativeArray());

                    if (boneTransformBuffer.Length != spriteSkin.boneTransforms.Length)
                    {
                        boneTransformBuffer = PostUpdateCommands.SetBuffer <BoneTransform>(entity);
                        boneTransformBuffer.ResizeUninitialized(spriteSkin.boneTransforms.Length);
                    }

                    for (var j = 0; j < boneTransformBuffer.Length; ++j)
                    {
                        boneTransformBuffer[j] = new BoneTransform()
                        {
                            Value = spriteSkin.boneTransforms[j].localToWorldMatrix
                        }
                    }
                    ;

                    PostUpdateCommands.SetComponent <WorldToLocal>(entity, new WorldToLocal()
                    {
                        Value = worldToLocal
                    });
                }

                if (currentSprite != sprite)
                {
                    PostUpdateCommands.SetSharedComponent <SpriteComponent>(entity, new SpriteComponent()
                    {
                        Value = sprite
                    });
                }

                if (!spriteRenderer.enabled)
                {
                    spriteSkin.ForceSkinning = true;
                }
            }

            entities.Dispose();
            worldToLocalComponents.Dispose();
        }
    }
Ejemplo n.º 3
0
 public static void SetBatchDeformableBufferAndLocalAABBArray(SpriteRenderer[] spriteRenderers, NativeArray <IntPtr> buffers, NativeArray <int> bufferSizes, NativeArray <Bounds> bounds)
 {
     SpriteRendererDataAccessExtensions.SetBatchDeformableBufferAndLocalAABBArray(spriteRenderers, buffers, bufferSizes, bounds);
 }