/** * @class Canvas * @description Handles rendering entities onto the canvas element. * @author Chris Peters * * @param {HTMLElement} canvas The active canvas element * @param {Camera} camera The camera instance */ export default class Canvas { constructor(canvas, camera) { this._canvas = canvas; this._camera = camera; this._context = this._canvas.getContext('2d'); this.setImageSmoothing(true); } /** * Clears the entire canvas and optionally fills with a color * * @method Canvas#clear * @param {String} [color] If passed, will fill the canvas with the color value */ clear(color) { this._context.clearRect(0, 0, this._canvas.width, this._canvas.height); if (color) { this._context.save(); this._context.fillStyle = color; this._context.fillRect(0, 0, this._canvas.width, this._canvas.height); this._context.restore(); } } /** * Returns the context object * * @method Canvas#getContext * @return {Object} The 2D context object */ getContext() { return this._context; } /** * Offsets canvas based on camera and calls an entity's render method passing the context. * Saves and restores context and beginning and end of operation. * * @method Canvas#render * @param {Object} entity [description] */ render(entity, factor, ticks) { this._context.save(); this._context.translate(-this._camera.getX(), -this._camera.getY()); entity.render(this._context, factor, ticks); this._context.restore(); } /** * Set the context image smoothing * * @method Canvas#setImageSmoothing * @param {Boolean} val The image smoothing value */ setImageSmoothing(val) { this._imageSmoothingEnabled = val; this._context.imageSmoothingEnabled = this._imageSmoothingEnabled; this._context.mozImageSmoothingEnabled = this._imageSmoothingEnabled; this._context.webkitImageSmoothingEnabled = this._imageSmoothingEnabled; this._context.msImageSmoothingEnabled = this._imageSmoothingEnabled; return this; } }