internal void Draw(DrawSpec spec) { if (spec.transform != null) { var transform = spec.transform.Value; Html5.Context.SetTransform(transform.M11, transform.M12, transform.M21, transform.M22, transform.M41, transform.M42); } foreach (var sprite in spec.spriteSpecs) { Html5.Context.Save(); Html5.Context.Translate(sprite.position.X, sprite.position.Y); Html5.Context.Rotate(sprite.rotation); if (sprite.text == null) { if (sprite.color.PackedValue != Color.White.PackedValue) //Save some CPU/GPU resource { Html5.Context.GlobalAlpha = (float)sprite.color.PackedValue / (float)Color.White.PackedValue; } } float dx = -sprite.origin.X * (sprite.useVScale ? sprite.vScale.X : sprite.scale); float dy = -sprite.origin.Y * (sprite.useVScale ? sprite.vScale.Y : sprite.scale); if (sprite.rectangle == null) { if (sprite.text == null) //texture { float dw = sprite.texture.Width * (sprite.useVScale ? sprite.vScale.X : sprite.scale); float dh = sprite.texture.Height * (sprite.useVScale ? sprite.vScale.Y : sprite.scale); if (sprite.effects == SpriteEffects.FlipHorizontally) { Html5.Context.Scale(-1, 1); Html5.Context.Translate(-dw, 0f); } else if (sprite.effects == SpriteEffects.FlipVertically) { Html5.Context.Scale(1, -1); Html5.Context.Translate(0f, -dh); } Html5.Context.DrawImage(sprite.texture.Image, dx, dy, dw, dh ); } else //font { Html5.Context.TextAlign = CanvasTypes.CanvasTextAlign.Start; var color = sprite.color; Html5.Context.FillStyle = string.Format("rgba({0},{1},{2},{3})", Convert.ToInt32(color.R), Convert.ToInt32(color.G), Convert.ToInt32(color.B), Convert.ToInt32(color.A) ); float size = SpriteFont.Size * sprite.scale; Html5.Context.Font = Convert.ToInt32(size) + "px " + SpriteFont.Font; Html5.Context.FillText(sprite.text, Convert.ToInt32(dx), 0); } } else { var rec = sprite.rectangle.Value; float sx = rec.X; float sy = rec.Y; float sw = rec.Width; float sh = rec.Height; float dw = rec.Width * (sprite.useVScale ? sprite.vScale.X : sprite.scale); float dh = rec.Height * (sprite.useVScale ? sprite.vScale.Y : sprite.scale); if (sprite.effects == SpriteEffects.FlipHorizontally) { Html5.Context.Scale(-1, 1); Html5.Context.Translate(-dw, 0f); } else if (sprite.effects == SpriteEffects.FlipVertically) { Html5.Context.Scale(1, -1); Html5.Context.Translate(0f, -dh); } Html5.Context.DrawImage(sprite.texture.Image, sx, sy, sw, sh, dx, dy, dw, dh ); } Html5.Context.Restore(); } if (spec.transform != null) { Html5.Context.SetTransform(1, 0, 0, 1, 0, 0); } }
public SpriteBatch(GraphicsDevice graphicDevice) { _graphicDevice = graphicDevice; drawSpecs = new DrawSpec(); drawSpecs.spriteSpecs = new List <SpriteSpec>(); }