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); }
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)); }
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); }
public static Matrix CreatePerspectiveOffCenter(RectangleI viewingVolume, float nearPlaneDistance, float farPlaneDistance) { return(CreatePerspectiveOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, nearPlaneDistance, farPlaneDistance)); }
public static Matrix CreateOrthographicOffCenter(RectangleI viewingVolume, float zNearPlane, float zFarPlane) { return(CreateOrthographicOffCenter(viewingVolume.Left, viewingVolume.Right, viewingVolume.Bottom, viewingVolume.Top, zNearPlane, zFarPlane)); }
public bool Equals(RectangleI rectangleI) { return(this == rectangleI); }