drawImage(particle) {
    const w = (particle.body.width * particle.scale) | 0;
    const h = (particle.body.height * particle.scale) | 0;
    const x = particle.p.x - w / 2;
    const y = particle.p.y - h / 2;

    if (!!particle.color) {
      if (!particle.data["buffer"]) particle.data.buffer = this.createBuffer(particle.body);

      const bufContext = particle.data.buffer.getContext("2d");
      bufContext.clearRect(0, 0, particle.data.buffer.width, particle.data.buffer.height);
      bufContext.globalAlpha = particle.alpha;
      bufContext.drawImage(particle.body, 0, 0);

      bufContext.globalCompositeOperation = "source-atop";
      bufContext.fillStyle = ColorUtil.rgbToHex(particle.rgb);
      bufContext.fillRect(0, 0, particle.data.buffer.width, particle.data.buffer.height);
      bufContext.globalCompositeOperation = "source-over";
      bufContext.globalAlpha = 1;

      this.context.drawImage(
        particle.data.buffer,
        0,
        0,
        particle.data.buffer.width,
        particle.data.buffer.height,
        x,
        y,
        w,
        h
      );
    } else {
      this.context.save();

      this.context.globalAlpha = particle.alpha;
      this.context.translate(particle.p.x, particle.p.y);
      this.context.rotate(MathUtil.degreeTransform(particle.rotation));
      this.context.translate(-particle.p.x, -particle.p.y);
      this.context.drawImage(particle.body, 0, 0, particle.body.width, particle.body.height, x, y, w, h);

      this.context.globalAlpha = 1;
      this.context.restore();
    }
  }
Draws an image particle.
@param {object} particle - The particle to draw.
@private