/* ---------------------------------------------------------------------------
                                   - Jade SDK -
                             (c) 2003 Alexis PAUTROT
                            Site Web  -  jadesdk.free.fr
                            Contact   -  jadesdk@free.fr
   --------------------------------------------------------------------------- */
package tutorial_02;

// importe package moteur
import jade.engine.*;

// importe package de chargement
import jade.loader.JadeLoader;
import jade.loader.JadeContainer;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;


// classe de chargement et scène de jeu
public class MainScene implements JadeLoader, JadeScene, KeyListener
{
	// container d'affichage
	JadeContainer container;

	// moteur et surface d'affichage
	JadeDisplay display;

	// fond d'écran
	JadeBackground background;

	// police de caractère bitmap
	JadeFont font;

	// police de caractère bitmap
	JadeFont arialFont, bankGothicFont, platiniumFont, platinium2Font;

	// position du texte
	int stringX=50, stringY=50;

	// style d'affichage du texte
	boolean stringAlignment = JadeFont.HORIZONTAL;
	int letterShiftX=0, letterShiftY=0;

	// touche escape stoppe l'application
	public final void keyReleased(KeyEvent ke)
	{
		int key = ke.getKeyCode();

		if (key==KeyEvent.VK_ESCAPE) container.exit();

		if (key==KeyEvent.VK_SPACE)
		{
			if ( font==arialFont ) font = bankGothicFont;
			else
			if ( font==bankGothicFont ) font = platiniumFont;
			else
			if ( font==platiniumFont ) font = platinium2Font;
			else
			if ( font==platinium2Font ) font = arialFont;
		}

		if (key==KeyEvent.VK_X)
		{
			stringX = 50; stringY = 50;
			stringAlignment = JadeFont.HORIZONTAL;
			letterShiftX=0; letterShiftY=0;
		}

		if (key==KeyEvent.VK_O) stringY -= 10;
		if (key==KeyEvent.VK_L) stringY += 10;
		if (key==KeyEvent.VK_K) stringX -= 10;
		if (key==KeyEvent.VK_M) stringX += 10;

		if (key==KeyEvent.VK_T) stringAlignment = ! stringAlignment;

		if (key==KeyEvent.VK_Y) letterShiftX += 1;
		if (key==KeyEvent.VK_H) letterShiftX -= 1;

		if (key==KeyEvent.VK_U) letterShiftY += 1;
		if (key==KeyEvent.VK_J) letterShiftY -= 1;
	}
	public final void keyPressed(KeyEvent ke){}
	public final void keyTyped(KeyEvent ke) {}

	// méthode de chargement et de lancement de jeu
	public final void loadAndRun(JadeContainer container)
	{
		this.container=container;

		// créer moteur d'affichage
		display=new JadeDisplay(container);

		// créer interface de chargement
		JadeLoadingInterface jli=new JadeLoadingInterface(display);

		jli.setMessage("Loading..");
		jli.initializeProgress(125);
			// défini chemin de chargement
			JadeMediaLoader.setPath("tutorial_02/");

			// charge polices
			arialFont=new JadeFont(JadeMediaLoader.parseImage(JadeMediaLoader.loadImage("arial.gif"),21,4),"abcdefghijklmnopqrstuvwxyz0123456789,.:;!?ABCDEFGHIJKLMNOPQRSTUVWXYZ+-*/\\ ()[]=\"{}_&");
			jli.setProgress(25);

			bankGothicFont=new JadeFont(JadeMediaLoader.parseImage(JadeMediaLoader.loadImage("bankgothic.gif"),10,9),"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>=+-*/,.;:!?\\&$%#@\"()[]{}_ ",8,10);
			jli.setProgress(25);

			platiniumFont=new JadeFont(JadeMediaLoader.parseImage(JadeMediaLoader.loadImage("platinium.gif"),53,1),"abcdefghijklmnopqrstuvwxyz0123456789?!.:,/ *$ABCDEFGH");
			jli.setProgress(25);

			platinium2Font=new JadeFont(JadeMediaLoader.parseImage(JadeMediaLoader.loadImage("platinium2.gif"),41,1),"abcdefghijklmnopqrstuvwxyz0123456789?!.: ");
			jli.setProgress(25);

			font=arialFont;

		// créer fond d'écran
		background=new JadeImageMosaicBackground(JadeMediaLoader.loadImage("checker.gif"));
		jli.setProgress(25);

		// accroche clavier
		display.setKeyListener(this);

		// lance la scène
		display.start(this);
	}

	// démarrage de la scène
	public final void begin()
	{
		// initialise moteur
		display.setAnimationRate(30);
	}

	// fin de la scène
	public final void end()
	{
	}

	// boucle d'animation
	public final void mainLoop()
	{
		draw();
	}

	public final void draw()
	{
		// efface surface d'affichage avec fond d'écran
		display.clearWithBackground(background);

		// affiche chaîne
		font.drawString("this is a string..",stringX,stringY,display.getDoubleBufferedGraphics(),stringAlignment,letterShiftX,letterShiftY);

		// affiche texte
		Graphics gc = display.getDoubleBufferedGraphics();
		gc.setColor(Color.black);
		gc.drawString("'space' : cycle through fonts",10,200);
		gc.drawString("'x' : reset to default",10,220);
		gc.drawString("'o,k,l,m' : move the string",10,240);
		gc.drawString("'t' : string alignment",10,260);
		gc.drawString("'y,h' : letter horizontal shift",10,275);
		gc.drawString("'u,j' : letter vertical shift",10,290);

		// affiche style choisi
		gc.setColor(Color.darkGray);
		if (font==arialFont) gc.drawString("arial",300,200);
		if (font==bankGothicFont) gc.drawString("bank gothic",300,200);
		if (font==platiniumFont) gc.drawString("platinium",300,200);
		if (font==platinium2Font) gc.drawString("platinium 2",300,200);

		gc.drawString(""+stringX+","+stringY,300,240);

		if ( stringAlignment == JadeFont.HORIZONTAL )
				gc.drawString("horizontal",300,260);
		else 	gc.drawString("vertical",300,260);

		gc.drawString(""+letterShiftX,300,275);
		gc.drawString(""+letterShiftY,300,290);

		// affiche bandeau de texte
		gc.setColor(Color.black);
		gc.fillRect(0,0,400,15);
		gc.setColor(Color.white);
		gc.drawString("press escape to quit", 5,12 );
	}
}
