Esempio n. 1
0
        public Sprite AddSprite(string file, RectangleI?source = null)
        {
            Platform.LoadImage(file, out int width, out int height, out byte[] imageData);
            Bitmap spriteData = new Bitmap(imageData, width, height);

            RectangleI s = source ?? new RectangleI(width, height);

#if DEBUG
            Point2 offset = GetValidPlacementNaive(s.W, s.H);
#else
            Point2 offset = GetValidPlacement(s.W, s.H);
#endif

            for (int y = 0; y < s.H; y++)
            {
                for (int x = 0; x < s.W; x++)
                {
                    Bitmap[offset.X + x, offset.Y + y] = spriteData[s.X + x, s.Y + y];
                }
            }

            if (texture == null)
            {
                throw new CKGLException("SpriteSheet.Texture is null.");
            }
            texture.UpdateData(spriteData.Bytes(), new RectangleI(offset.X, offset.Y, spriteData.Width, spriteData.Height));

            Sprite sprite = new Sprite(this, offset.X, offset.Y, s.W, s.H);
            Sprites.Add(sprite);
            aabbs.Add(new AABBi(sprite.SpriteSheetX, sprite.SpriteSheetY, sprite.Width + padding, sprite.Height + padding));
            return(sprite);
        }
Esempio n. 2
0
        private void _AddSprite(HTMLImageElement image, Sprite sprite, RectangleI?source = null)
        {
            RectangleI s = source ?? new RectangleI((int)image.width, (int)image.height);

#if DEBUG
            Point2 offset = GetValidPlacementNaive(s.W, s.H);
#else
            Point2 offset = GetValidPlacement(s.W, s.H);
#endif

            //for (int y = 0; y < s.H; y++)
            //	for (int x = 0; x < s.W; x++)
            //		Bitmap[offset.X + x, offset.Y + y] = spriteData[s.X + x, s.Y + y];

            if (Platform.GraphicsBackend == GraphicsBackend.WebGL2)
            {
                (Texture as WebGL2.WebGL2Texture).UpdateData(image, offset.X, offset.Y);
            }
            else if (Platform.GraphicsBackend == GraphicsBackend.WebGL)
            {
                (Texture as WebGL.WebGLTexture).UpdateData(image, offset.X, offset.Y);
            }

            sprite.Update(this, offset.X, offset.Y, s.W, s.H);
            Sprites.Add(sprite);
            aabbs.Add(new AABBi(sprite.SpriteSheetX, sprite.SpriteSheetY, sprite.Width + padding, sprite.Height + padding));
        }
Esempio n. 3
0
        internal Sprite AddSpriteFontGlyph(Bitmap spriteData, RectangleI source, bool xtrim = false)
        {
            int spriteOffsetX = 0;
            int spriteWidth   = source.W;

            if (xtrim)
            {
                spriteOffsetX = source.W;
                spriteWidth   = 0;

                for (int y = source.Top; y < source.Bottom; y++)
                {
                    for (int x = source.Left; x < source.Right; x++)
                    {
                        if (spriteData[x, y] != Colour.Transparent)
                        {
                            spriteWidth   = Math.Max(x - source.Left, spriteWidth);
                            spriteOffsetX = Math.Min(x - source.Left, spriteOffsetX);
                        }
                    }
                }

                spriteWidth++;
            }

#if DEBUG
            Point2 offset = GetValidPlacementNaive(spriteWidth, source.H);
#else
            Point2 offset = GetValidPlacement(spriteWidth, source.H);
#endif

            for (int y = 0; y < source.H; y++)
            {
                for (int x = spriteOffsetX; x < spriteOffsetX + spriteWidth; x++)
                {
                    Bitmap[offset.X + x - spriteOffsetX, offset.Y + y] = spriteData[source.X + x, source.Y + y];
                }
            }

            dirty = true;

            Sprite sprite = new Sprite(this, offset.X, offset.Y, spriteWidth, source.H);
            Sprites.Add(sprite);
            aabbs.Add(new AABBi(sprite.SpriteSheetX, sprite.SpriteSheetY, sprite.Width + padding, sprite.Height + padding));
            return(sprite);
        }
Esempio n. 4
0
 public static Matrix CreatePerspectiveOffCenter(RectangleI viewingVolume, float nearPlaneDistance, float farPlaneDistance)
 {
     return(CreatePerspectiveOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, nearPlaneDistance, farPlaneDistance));
 }
Esempio n. 5
0
 public static Matrix CreateOrthographicOffCenter(RectangleI viewingVolume, float zNearPlane, float zFarPlane)
 {
     return(CreateOrthographicOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, zNearPlane, zFarPlane));
 }
Esempio n. 6
0
 public bool Equals(RectangleI rectangleI)
 {
     return(this == rectangleI);
 }