
package com.roxiga.guitar;

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
//A
import android.media.MediaPlayer;
import com.roxiga.hypermotion3d.*;
import com.roxiga.models.*;

public class Guitar implements GLSurfaceView.Renderer
{
	//ReNXg
	private Context _context;
	//ʕ
	public int _width;
	//ʍ
	public int _height;
    //Jʒu
    private Vector3D _eye = new Vector3D(0.0f, 100.0f, 1200.0f);
    //J̒_
    private Vector3D _lookAt = new Vector3D(0.0f, 100.0f, 0.0f);
    //J_\xNg
    private Vector3D _up = new Vector3D(0.0f, 1.0f, 0.0f);
    //ARMl
    private Model3D _jersey = new BlueJersey();
    //^Cg
    private Sprite2D _title = new Sprite2D();
    //
    static final int GS_TITLE = 0;
    //
    static final int GS_MAIN = 1;
    //
    static final int GS_GAMEOVER = 2;
    //
    int _gameState = GS_TITLE;
    //By
    public MediaPlayer _mpBGM = new MediaPlayer();

    /**
     * @Override
     * RXgN^
     */
    public Guitar(Context context)
    {
        _context = context;
		//C
        _mpBGM = MediaPlayer.create(context, R.raw.bgm);
    }

    // @Override
    // `̂߂ɖt[ĂяoCxg
    public void onDrawFrame(GL10 gl)
    {
        // `pobt@NA
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT
        		| GL10.GL_DEPTH_BUFFER_BIT);

        // fr[sw
        gl.glMatrixMode(GL10.GL_MODELVIEW);
        // ݑIĂs(fr[s)ɁAPʍsZbg
        gl.glLoadIdentity();

        // JʒuZbg
        GLU.gluLookAt(gl,
                _eye._x,_eye._y,_eye._z,
                _lookAt._x,_lookAt._y,_lookAt._z,
                _up._x,_up._y,_up._z);
        
        switch ( _gameState )
        {
        case GS_TITLE:
        	_title.draw(gl,getRatio());
        	break;
        case GS_MAIN:
        	_jersey.draw(gl);
			//D
        	if ( !_mpBGM.isPlaying() )
			{
        		//E
				_gameState = GS_GAMEOVER;
			}
			break;
        case GS_GAMEOVER:
    		gl.glClearColor(1,1,1,1);
        	break;
        }
    }
  
	private float getRatio()
	{
		return (float)_width/600.0f;
	}
    
    // @Override
    // T[tFCX̃TCYύXɌĂ΂
    public void onSurfaceChanged(
    		GL10 gl, int width, int height)
    {
    	// r[|[gTCYɍ킹ăZbgȂ
        gl.glViewport(0, 0, width, height);
        // AXyNg[g
        float ratio = (float) width / height;
        // ˉesI
        gl.glMatrixMode(GL10.GL_PROJECTION);
        // ݑIĂs(ˉes)ɁAPʍsZbg
        gl.glLoadIdentity();
        /* Perspective̐ݒ(px, AXyNg)AjAAt@[*/
        GLU.gluPerspective(gl, 30.0f, ratio, 10f, 10000f);
    }

    // @Override
    //T[tFCX܂͍ĐۂɌĂ΂
    public void onSurfaceCreated(
    		GL10 gl, EGLConfig config)
    {
        // fBU𖳌
        gl.glDisable(GL10.GL_DITHER);
        // J[ƃeNX`W̕ԐxAłIȂ̂Ɏw
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
        		GL10.GL_FASTEST);
        // Жʕ\L
        gl.glEnable(GL10.GL_CULL_FACE);
        // JOݒCCW
        gl.glFrontFace(GL10.GL_CCW);
        // [xeXgL
        gl.glEnable(GL10.GL_DEPTH_TEST);
    	//eNX`@\ON
    	gl.glEnable(GL10.GL_TEXTURE_2D);
    	//wiF
    	gl.glClearColor(0,0,0,1);
    	// _zgƂ錾
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        //eNX`
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        //eNX`ǂݍ
		_jersey.setTexture(gl,_context.getResources(),R.drawable.bluejersey);
        //eNX`ǂݍ
		_title.setTexture(gl,_context.getResources(),R.drawable.title);
   }
    
	
	public void actionDown(float x,float y)
	{
	}
	
	public void actionMove(float x,float y)
	{
	}

	public void actionUp(float x,float y)
	{
		switch ( _gameState )
		{
		case GS_TITLE:
			init();
			break;

		case GS_MAIN:
			break;

		case GS_GAMEOVER:
			//F
			_gameState = GS_TITLE;
			break;
		}
 	}

	//
	private void init()
	{
		_gameState = GS_MAIN;
		//G
		_mpBGM.seekTo(0);
		//H
		_mpBGM.start();
	}
}
