/*
 * This is a simple example of the multi-mode tv out terminal which shows graphics drawing capabilities with a missile command style demo
 *
 * Dave Curran 2013-09-28
 *
 * Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
 * Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
 *
 * The display microcontroller is wired as follows:
 * pin 28 (SCL) ==> Display pin 28 (SCL)
 * pin 27 (SDA) ==> Display pin 27 (SDA)
 * Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
 *
 * The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
 *
 */

#include <Terminal.h>

// Create a terminal in TWI mode
Terminal term;

void setup() 
{ 
  term.clear();
  term.cursorOff(); 
}

void loop() 
{
  // clear the screen
  term.clear();

  // draw the base line
  term.fillBox(0,99, 159,100);

  // draw the bases
  for(int b=0; b<3; b++)
  {
    byte pos = 27 + (b*54);
    term.setPixel(pos, 96);    
    term.drawLine(pos-2, 97, pos+2, 97);
    term.drawLine(pos-4, 98, pos+4, 98);    
  }

  // fire 5 shots
  for(int n=0; n<5; n++)
  {
    fireShot();
    delay(1000);
  }

  // game over
  term.clear();
  term.setFont(TERMINAL_FONT_40_BOLD_DOUBLE);
  term.setCursor(15, 12);
  term.setFont(TERMINAL_FONT_40_BOLD_DOUBLE);
  term.print("GAME OVER!");

  delay(5000);  
}

// fire a shot
void fireShot()
{
  // take aim
  uint8_t origin = random(0,159);
  uint8_t destination = random(0,159); 

  // fire
  // could have used term.drawLine(origin,0, destination,99);, but this adds a delay
  int diff = destination-origin;
  for(int y=0; y<99; y++)
  {
    term.setPixel(origin + (diff*y/99), y);
    delay(100);
  }

  // bang
  term.fillCircle(destination,99, 10);
  delay(200);
  term.clearCircle(destination,99, 10);
  delay(200);

  // clear it up
  term.clearLine(origin,0, destination,99);
  term.fillCircle(destination,99, 15);
  delay(200);
  term.clearCircle(destination,99, 15);
  delay(200);
}










