Beispiel #1
0
        public void UpdatePosition(int index, Render.IRenderNode renderNode, int baseLineOffset,
                                   Render.PositionTransformation positionTransformation, Render.SizeTransformation sizeTransformation)
        {
            var position = new Position(renderNode.X, renderNode.Y);
            var size     = new Size(renderNode.Width, renderNode.Height);

            if (positionTransformation != null)
            {
                position = positionTransformation(position);
            }

            if (sizeTransformation != null)
            {
                size = sizeTransformation(size);
            }

            positionBuffer.Update(index, (short)position.X, (short)position.Y);
            positionBuffer.Update(index + 1, (short)(position.X + size.Width), (short)position.Y);
            positionBuffer.Update(index + 2, (short)(position.X + size.Width), (short)(position.Y + size.Height));
            positionBuffer.Update(index + 3, (short)position.X, (short)(position.Y + size.Height));

            if (Shape != Shape.Triangle && baseLineBuffer != null)
            {
                ushort baseLine = (ushort)(position.Y + size.Height + baseLineOffset);

                baseLineBuffer.Update(index, baseLine);
                baseLineBuffer.Update(index + 1, baseLine);
                baseLineBuffer.Update(index + 2, baseLine);
                baseLineBuffer.Update(index + 3, baseLine);
            }
        }
Beispiel #2
0
        public int GetDrawIndex(Render.IColoredRect coloredRect,
                                Render.PositionTransformation positionTransformation,
                                Render.SizeTransformation sizeTransformation)
        {
            var position = new Position(coloredRect.X, coloredRect.Y);
            var size     = new Size(coloredRect.Width, coloredRect.Height);

            if (positionTransformation != null)
            {
                position = positionTransformation(position);
            }

            if (sizeTransformation != null)
            {
                size = sizeTransformation(size);
            }

            int index = positionBuffer.Add((short)position.X, (short)position.Y);

            positionBuffer.Add((short)(position.X + size.Width), (short)position.Y, index + 1);
            positionBuffer.Add((short)(position.X + size.Width), (short)(position.Y + size.Height), index + 2);
            positionBuffer.Add((short)position.X, (short)(position.Y + size.Height), index + 3);

            indexBuffer.InsertQuad(index / 4);

            if (layerBuffer != null)
            {
                int layerBufferIndex = layerBuffer.Add(coloredRect.DisplayLayer);

                if (layerBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 1);
                layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 2);
                layerBuffer.Add(coloredRect.DisplayLayer, layerBufferIndex + 3);
            }

            if (colorBuffer != null)
            {
                var color = coloredRect.Color;

                int colorBufferIndex = colorBuffer.Add(color);

                if (colorBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                colorBuffer.Add(color, colorBufferIndex + 1);
                colorBuffer.Add(color, colorBufferIndex + 2);
                colorBuffer.Add(color, colorBufferIndex + 3);
            }

            return(index);
        }
Beispiel #3
0
        public int GetDrawIndex(Render.ISprite sprite, Render.PositionTransformation positionTransformation,
                                Render.SizeTransformation sizeTransformation, Position maskSpriteTextureAtlasOffset = null)
        {
            var position = new Position(sprite.X, sprite.Y);
            var size     = new Size(sprite.Width, sprite.Height);

            if (positionTransformation != null)
            {
                position = positionTransformation(position);
            }

            if (sizeTransformation != null)
            {
                size = sizeTransformation(size);
            }

            int index = positionBuffer.Add((short)position.X, (short)position.Y);

            positionBuffer.Add((short)(position.X + size.Width), (short)position.Y, index + 1);
            positionBuffer.Add((short)(position.X + size.Width), (short)(position.Y + size.Height), index + 2);
            positionBuffer.Add((short)position.X, (short)(position.Y + size.Height), index + 3);

            indexBuffer.InsertQuad(index / 4);

            if (textureAtlasOffsetBuffer != null)
            {
                int textureAtlasOffsetBufferIndex = textureAtlasOffsetBuffer.Add((short)sprite.TextureAtlasOffset.X, (short)sprite.TextureAtlasOffset.Y);

                if (textureAtlasOffsetBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                textureAtlasOffsetBuffer.Add((short)(sprite.TextureAtlasOffset.X + sprite.Width), (short)sprite.TextureAtlasOffset.Y, textureAtlasOffsetBufferIndex + 1);
                textureAtlasOffsetBuffer.Add((short)(sprite.TextureAtlasOffset.X + sprite.Width), (short)(sprite.TextureAtlasOffset.Y + sprite.Height), textureAtlasOffsetBufferIndex + 2);
                textureAtlasOffsetBuffer.Add((short)sprite.TextureAtlasOffset.X, (short)(sprite.TextureAtlasOffset.Y + sprite.Height), textureAtlasOffsetBufferIndex + 3);
            }

            if (Masked && maskSpriteTextureAtlasOffset != null)
            {
                int maskTextureAtlasOffsetBufferIndex = maskTextureAtlasOffsetBuffer.Add((short)maskSpriteTextureAtlasOffset.X, (short)maskSpriteTextureAtlasOffset.Y);

                if (maskTextureAtlasOffsetBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                maskTextureAtlasOffsetBuffer.Add((short)(maskSpriteTextureAtlasOffset.X + sprite.Width), (short)maskSpriteTextureAtlasOffset.Y, maskTextureAtlasOffsetBufferIndex + 1);
                maskTextureAtlasOffsetBuffer.Add((short)(maskSpriteTextureAtlasOffset.X + sprite.Width), (short)(maskSpriteTextureAtlasOffset.Y + sprite.Height), maskTextureAtlasOffsetBufferIndex + 2);
                maskTextureAtlasOffsetBuffer.Add((short)maskSpriteTextureAtlasOffset.X, (short)(maskSpriteTextureAtlasOffset.Y + sprite.Height), maskTextureAtlasOffsetBufferIndex + 3);
            }

            if (Shape != Shape.Triangle && baseLineBuffer != null)
            {
                ushort baseLine = (ushort)(position.Y + size.Height + sprite.BaseLineOffset);

                int baseLineBufferIndex = baseLineBuffer.Add(baseLine);

                if (baseLineBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                baseLineBuffer.Add(baseLine, baseLineBufferIndex + 1);
                baseLineBuffer.Add(baseLine, baseLineBufferIndex + 2);
                baseLineBuffer.Add(baseLine, baseLineBufferIndex + 3);
            }

            if (layerBuffer != null)
            {
                byte layer = (sprite is Render.ILayerSprite) ? (sprite as Render.ILayerSprite).DisplayLayer : (byte)0;

                int layerBufferIndex = layerBuffer.Add(layer);

                if (layerBufferIndex != index)
                {
                    throw new System.Exception("Invalid index");
                }

                layerBuffer.Add(layer, layerBufferIndex + 1);
                layerBuffer.Add(layer, layerBufferIndex + 2);
                layerBuffer.Add(layer, layerBufferIndex + 3);
            }

            return(index);
        }