#include <graphicsim.h>

using namespace std;
class Axes : public Sprite{
private:
  Line x;
  Line y;
public:
  Axes();

  void setOrigin(Position new_o);
  void setOrientation(float new_o);
  void setXScale(float new_xscale);
  void setYScale(float new_yscale);

  void paint();
  RectBox boundingBox();
};

Axes::Axes(){
  x = Line(Position(0, 0), Position(100, 0), Position(10, 10));
  y = Line(Position(0, 0), Position(0, 100), Position(10, 10));

  // Let's change colour of y axis to Red
  y.setLineColor(COLOR("Red"));
}
 
void Axes::setOrigin(Position new_o){
  for(int i = x.getOrigin().GetXDistance(); i <= new_o.GetXDistance(); i ++){
x.setOrigin(Position(i, x.getOrigin().GetYDistance()));
y.setOrigin(Position(i, y.getOrigin().GetYDistance()));
usleep(20000);
}

 for(int i = x.getOrigin().GetYDistance(); i <= new_o.GetYDistance(); i ++)    {
  x.setOrigin(Position(x.getOrigin().GetXDistance(), i));
  y.setOrigin(Position(y.getOrigin().GetXDistance(), i));
usleep(20000);
  } 
}

void Axes::setOrientation(float new_o){
  for(float curr_o = x.getOrientation(); curr_o <= new_o; curr_o = curr_o + 1.0){
  x.setOrientation(curr_o);
  y.setOrientation(curr_o);
  usleep(20000);
  }
}

void Axes::setXScale(float new_xscale){
  x.setXScale(new_xscale);
  y.setXScale(new_xscale);
}
void Axes::setYScale(float new_yscale){
  x.setYScale(new_yscale);
  y.setYScale(new_yscale);
}

void Axes::paint(){
  x.paint();
  y.paint();
}

RectBox Axes::boundingBox(){
  return x.boundingBox();
}


int main(){
  initCanvas("Understanding Co-ordinate sprite system");

  Axes a;
  cin.get();

  a.setOrigin(Position(200, 100));
  cin.get();

  a.setOrientation(45);
  cin.get();

  a.setXScale(5);
  cin.get();

  a.setYScale(2);
  cin.get();

  closeCanvas();
  return 0;
}
