gdjs.RuntimeScenePixiRenderer = function(runtimeScene, runtimeGameRenderer) {
  this._pixiRenderer = runtimeGameRenderer
    ? runtimeGameRenderer.getPIXIRenderer()
    : null;
  this._runtimeScene = runtimeScene;
  this._pixiContainer = new PIXI.Container(); //The Container meant to contains all pixi objects of the scene.
};

gdjs.RuntimeSceneRenderer = gdjs.RuntimeScenePixiRenderer; //Register the class to let the engine use it.

gdjs.RuntimeScenePixiRenderer.prototype.onGameResolutionResized = function() {
  if (!this._pixiRenderer) return;

  var runtimeGame = this._runtimeScene.getGame();
  this._pixiContainer.scale.x =
    this._pixiRenderer.width / runtimeGame.getGameResolutionWidth();
  this._pixiContainer.scale.y =
    this._pixiRenderer.height / runtimeGame.getGameResolutionHeight();
};

gdjs.RuntimeScenePixiRenderer.prototype.render = function() {
  if (!this._pixiRenderer) return;

  // this._renderProfileText(); //Uncomment to display profiling times

  // render the PIXI container of the scene
  this._pixiRenderer.backgroundColor = this._runtimeScene.getBackgroundColor();
  this._pixiRenderer.render(this._pixiContainer);
};

gdjs.RuntimeScenePixiRenderer.prototype._renderProfileText = function() {
  if (!this._runtimeScene.getProfiler()) return;

  if (!this._profilerText) {
    this._profilerText = new PIXI.Text(" ", {
      align: "left",
      stroke: "#FFF",
      strokeThickness: 1
    });
    this._pixiContainer.addChild(this._profilerText);
  }

  var average = this._runtimeScene.getProfiler().getFramesAverageMeasures();
  var outputs = [];
  gdjs.Profiler.getProfilerSectionTexts("All", average, outputs);

  this._profilerText.text = outputs.join("\n");
};

gdjs.RuntimeScenePixiRenderer.prototype.renderDebugDraw = function(instances, layersCameraCoordinates) {
  if (!this._debugDraw) {
    this._debugDraw = new PIXI.Graphics();
    this._pixiContainer.addChild(this._debugDraw);
  }
  /** @type PIXI.Graphics */
  var debugDraw = this._debugDraw;

  debugDraw.clear();
  debugDraw.beginFill(0x6868e8);
  debugDraw.lineStyle(1, 0x6868e8, 1);
  debugDraw.fillAlpha = 0.1;
  debugDraw.alpha = 0.8;

  for(var i = 0;i < instances.length;i++) {
    var object = instances[i];
    var cameraCoords = layersCameraCoordinates[object.getLayer()];
    var rendererObject = object.getRendererObject();

    if (!cameraCoords || !rendererObject) continue;

    var aabb = object.getAABB();
    debugDraw.drawRect(aabb.min[0], aabb.min[1], aabb.max[0] - aabb.min[0], aabb.max[1] - aabb.min[1]);
  }
  debugDraw.endFill();
};

gdjs.RuntimeScenePixiRenderer.prototype.hideCursor = function() {
  this._pixiRenderer.view.style.cursor = "none";
};

gdjs.RuntimeScenePixiRenderer.prototype.showCursor = function() {
  this._pixiRenderer.view.style.cursor = "";
};

gdjs.RuntimeScenePixiRenderer.prototype.getPIXIContainer = function() {
  return this._pixiContainer;
};
