unit Init;

interface

uses
  SysUtils,
  OPENGL,
  glfw,
  bibli;
procedure initialisation();

implementation



procedure initialisation();
const
rayonD=8;
rayonT=25;
long_c = 2;
larg_c = 2;
maxx = 50;
minx = -50;
maxcote = 50;
mincote = -50;
var
jouer:boolean;
x : integer;
y: integer;
i : integer;
alphaDM:integer;
alphaDT:integer;
deg :integer;   //regalge camera
cote : integer;
zoom: integer;
pivot :  integer;
obst : array[0..3] of array[0..6] of integer;
cube : array[0..3] of array[0..1] of integer;
obst_coin : array[0..6,0..3,0..1] of integer;

begin
jouer:=TRUE;
x:=0;
y:=0;
cote:=0;
alphaDM:=30;
alphaDT:=0;
deg:=0;
zoom:=0;
pivot:=0;

while (jouer) do
begin


  //initialisation de la fenetre OPENGL
  glfwInit();
   glfwOpenWindow(1000, 700, 0, 0, 0, 0, 42, 0, GLFW_WINDOW);
   glfwSetWindowTitle('Moteur'); // optionnel
   glBlendFunc(GL_SRC_ALPHA,GL_ONE);

   //le blabla pour calibrer la fenetre
  glClearColor( 0.0, 0.0, 0.0, 0.0 );
   glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT);
   glEnable( GL_DEPTH_TEST );

  // Placement de la caméra
  glViewPort(0, 0, 1000, 700);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluperspective(70,(640/480),1,100);

  //initialisation de la matrice de modelisation
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;

  gluLookAt(-15+x+zoom, 0+cote, 20-zoom, 0+x+deg+zoom, 0+cote+pivot, 10+deg, 0, 0, 1);

   //matrice de la carte
   glpushmatrix();

   pave(10,10,0,3,4,6,'bleu',200);
   pave(5,15,0,5,3,3,'jaune',100);
   pave(0,4,0,5,3,5,'blanc',100);
   pave(-10,30,0,6,6,4,'bleu',200);
   pave(-10,30,4,3,3,2,'pouet',200);
   pave(-10,-20,0,4,4,4,'vert',200);
   pave(10,-20,0,7,2,2,'vert',200);
   skybox(0,0,0,100,100,30,'noir','bleu',200);


  //matrice du pave

  glpushmatrix();



  glpopmatrix();

  //matrice pour le disque transparent
  glpushmatrix();

    pave(0+x,0+cote,0,2,2,2,'noir',100);
    glDepthMask(GL_FALSE);
    glenable(Gl_BLEND);
    gltranslate(x,cote,1);
    disk(0,rayonD-y,'bleu',alphaDM);
    gldisable(GL_BLEND);
    glDepthMask(GL_TRUE);
  glpopmatrix();


  //matrice du disque d'attaque
  glpushmatrix();
    glDepthMask(GL_FALSE);
    glenable(Gl_BLEND);
    gltranslate(x,cote,1);
    disk(0,rayonT,'rouge',alphaDT);
    gldisable(GL_BLEND);
    glDepthMask(GL_TRUE);
  glpopmatrix();


  glflush();

  glfwSwapBuffers();

jouer := glfwGetKey(GLFW_KEY_ESC) = 0;



// tableau données obstacles
obst[0,0]:=10;
obst[0,1]:=5;
obst[0,2]:=0;
obst[0,3]:=-10;
obst[0,4]:=-10;
obst[0,5]:=-10;
obst[0,6]:=10;

obst[1,0]:=10;
obst[1,1]:=15;
obst[1,2]:=4;
obst[1,3]:=30;
obst[1,4]:=30;
obst[1,5]:=-20;
obst[1,6]:=-20;

obst[2,0]:=3;
obst[2,1]:=5;
obst[2,2]:=5;
obst[2,3]:=6;
obst[2,4]:=3;
obst[2,5]:=4;
obst[2,6]:=2;

obst[3,0]:=4;
obst[3,1]:=3;
obst[3,2]:=3;
obst[3,3]:=6;
obst[3,4]:=3;
obst[3,5]:=4;
obst[3,6]:=2;

//tableau coordonnée coin du cube
//coordonnées x du coin gauche bas
obst_coin[0,0,0]:= obst[0,0] - (obst[3,0] div 2);
obst_coin[1,0,0]:= obst[0,1] - (obst[3,1] div 2);
obst_coin[2,0,0]:= obst[0,2] - (obst[3,2] div 2);
obst_coin[3,0,0]:= obst[0,3] - (obst[3,3] div 2);
obst_coin[4,0,0]:= obst[0,4] - (obst[3,4] div 2);
obst_coin[5,0,0]:= obst[0,5] - (obst[3,5] div 2);
obst_coin[6,0,0]:= obst[0,6] - (obst[3,6] div 2);
//coordonnées x du coin droit bas
obst_coin[0,1,0]:= obst[0,0] - (obst[3,0] div 2);
obst_coin[1,1,0]:= obst[0,1] - (obst[3,1] div 2);
obst_coin[2,1,0]:= obst[0,2] - (obst[3,2] div 2);
obst_coin[3,1,0]:= obst[0,3] - (obst[3,3] div 2);
obst_coin[4,1,0]:= obst[0,4] - (obst[3,4] div 2);
obst_coin[5,1,0]:= obst[0,5] - (obst[3,5] div 2);
obst_coin[6,1,0]:= obst[0,6] - (obst[3,6] div 2);
//coordonnées x du coin droit haut
obst_coin[0,2,0]:= obst[0,0] + (obst[3,0] div 2);
obst_coin[1,2,0]:= obst[0,1] + (obst[3,1] div 2);
obst_coin[2,2,0]:= obst[0,2] + (obst[3,2] div 2);
obst_coin[3,2,0]:= obst[0,3] + (obst[3,3] div 2);
obst_coin[4,2,0]:= obst[0,4] + (obst[3,4] div 2);
obst_coin[5,2,0]:= obst[0,5] + (obst[3,5] div 2);
obst_coin[6,2,0]:= obst[0,6] + (obst[3,6] div 2);
//coordonnées x du coin gauche haut
obst_coin[0,3,0]:= obst[0,0] + (obst[3,0] div 2);
obst_coin[1,3,0]:= obst[0,1] + (obst[3,1] div 2);
obst_coin[2,3,0]:= obst[0,2] + (obst[3,2] div 2);
obst_coin[3,3,0]:= obst[0,3] + (obst[3,3] div 2);
obst_coin[4,3,0]:= obst[0,4] + (obst[3,4] div 2);
obst_coin[5,3,0]:= obst[0,5] + (obst[3,5] div 2);
obst_coin[6,3,0]:= obst[0,6] + (obst[3,6] div 2);
//coordonnées cote du coin gauche bas
obst_coin[0,0,1]:= obst[1,0] - (obst[2,0] div 2);
obst_coin[1,0,1]:= obst[1,1] - (obst[2,1] div 2);
obst_coin[2,0,1]:= obst[1,2] - (obst[2,2] div 2);
obst_coin[3,0,1]:= obst[1,3] - (obst[2,3] div 2);
obst_coin[4,0,1]:= obst[1,4] - (obst[2,4] div 2);
obst_coin[5,0,1]:= obst[1,5] - (obst[2,5] div 2);
obst_coin[6,0,1]:= obst[1,6] - (obst[2,6] div 2);
//coordonnées cote du coin droit bas
obst_coin[0,1,1]:= obst[1,0] + (obst[2,0] div 2);
obst_coin[1,1,1]:= obst[1,1] + (obst[2,1] div 2);
obst_coin[2,1,1]:= obst[1,2] + (obst[2,2] div 2);
obst_coin[3,1,1]:= obst[1,3] + (obst[2,3] div 2);
obst_coin[4,1,1]:= obst[1,4] + (obst[2,4] div 2);
obst_coin[5,1,1]:= obst[1,5] + (obst[2,5] div 2);
obst_coin[6,1,1]:= obst[1,6] + (obst[2,6] div 2);
//coordonnées cote du coin droit haut
obst_coin[0,2,1]:= obst[1,0] + (obst[2,0] div 2);
obst_coin[1,2,1]:= obst[1,1] + (obst[2,1] div 2);
obst_coin[2,2,1]:= obst[1,2] + (obst[2,2] div 2);
obst_coin[3,2,1]:= obst[1,3] + (obst[2,3] div 2);
obst_coin[4,2,1]:= obst[1,4] + (obst[2,4] div 2);
obst_coin[5,2,1]:= obst[1,5] + (obst[2,5] div 2);
obst_coin[6,2,1]:= obst[1,6] + (obst[2,6] div 2);
//coordonnées cote du coin gauche haut
obst_coin[0,3,1]:= obst[1,0] - (obst[2,0] div 2);
obst_coin[1,3,1]:= obst[1,1] - (obst[2,1] div 2);
obst_coin[2,3,1]:= obst[1,2] - (obst[2,2] div 2);
obst_coin[3,3,1]:= obst[1,3] - (obst[2,3] div 2);
obst_coin[4,3,1]:= obst[1,4] - (obst[2,4] div 2);
obst_coin[5,3,1]:= obst[1,5] - (obst[2,5] div 2);
obst_coin[6,3,1]:= obst[1,6] - (obst[2,6] div 2);

//tableau coordonnées points du cube qui se déplace
cube[0,0]:= x - (larg_c div 2);  //bas gauche
cube[0,1]:= cote - (long_c div 2);

cube[1,0]:= x - (larg_c div 2); // bas droite
cube[1,1]:= cote + (long_c div 2);

cube[2,0]:= x + (larg_c div 2);   // haut droite
cube[2,1]:= cote + (long_c div 2);

cube[3,0]:= x + (larg_c div 2); // haut gauche
cube[3,1]:= cote - (long_c div 2);


//definition des touches
if y<rayonD then
  if cube[2,0] + 1 <= maxx then
        begin
        if glfwGetKey(GLFW_KEY_UP) = GLFW_PRESS  then
                                                    begin
                                                      x:=x+1;
                                                      cube[0,0]:= cube[0,0] + 1;
                                                      cube[1,0]:= cube[1,0] + 1;
                                                      cube[2,0]:= cube[2,0] + 1;
                                                      cube[3,0]:= cube[3,0] + 1;
                                                      y:=y+1;
                                                    end;
        end;
begin
if y <rayonD then
  if cube[0,0] - 1 >= minx then
    if glfwGetKey(GLFW_KEY_DOWN) = GLFW_PRESS then
      begin
      x:=x-1;
      cube[0,0]:= cube[0,0] - 1;
      cube[1,0]:= cube[1,0] - 1;
      cube[2,0]:= cube[2,0] - 1;
      cube[3,0]:= cube[3,0] - 1;
      y:=y+1;
      end;

if y<rayonD then
  if cube[1,1] + 1 <= maxcote then
    if glfwGetKey(GLFW_KEY_LEFT) = GLFW_PRESS then
      begin
      cote:=cote+1;
      cube[0,1]:= cube[0,1] + 1;
      cube[1,1]:= cube[1,1] + 1;
      cube[2,1]:= cube[2,1] + 1;
      cube[3,1]:= cube[3,1] + 1;
      y:=y+1;
      end;
if y<rayonD then
   if cube[0,1] - 1 >= mincote then
      if glfwGetKey(GLFW_KEY_RIGHT) = GLFW_PRESS then
        begin
          cote:=cote-1;
          cube[0,1]:= cube[0,1] - 1;
          cube[1,1]:= cube[1,1] - 1;
          cube[2,1]:= cube[2,1] - 1;
          cube[3,1]:= cube[3,1] - 1;
          y:=y+1;
        end;
//on definie la touche qui fait passer en mouvement vers l'attaque
  if y>=rayonD then
    if glfwGetKey(GLFW_KEY_SPACE) = GLFW_PRESS then
    begin
      y:=0;
      alphaDM:=30;
     alphaDT:=0;
    end;
  if (glfwGetKey(GLFW_KEY_DEL) = GLFW_PRESS)and (y=8) then
   begin
    alphaDM:=0;
    alphaDT:=50;
    end;
end;


    //reglage de la camera vec les bouton F2 a F8



if (glfwGetKey(GLFW_KEY_F6) = GLFW_PRESS) then
  begin
    deg:=deg+1;
  end;

  if (glfwGetKey(GLFW_KEY_F7) = GLFW_PRESS )then
  deg := deg-1;

if (glfwGetKey(GLFW_KEY_F5) = GLFW_PRESS) then
  begin
    zoom:=zoom+1;
  end;

  if (glfwGetKey(GLFW_KEY_F4) = GLFW_PRESS )then
  zoom := zoom-1;

if (glfwGetKey(GLFW_KEY_F3) = GLFW_PRESS )then
  pivot:=pivot+1;

 if (glfwGetKey(GLFW_KEY_F2) = GLFW_PRESS )then
  pivot:=pivot-1;



sleep(100);


end;

end;
end.
