Ejemplo n.º 1
0
Bool ZFrame::MouseButtonRelease(UShort nButton, float Absolute_x, float Absolute_y)
{
  ZListItem * Item;
  ZFrame * Frame;

  // Drag and drop

  if (GuiManager->DragingFrame)
  {
    if (GuiManager->DragingFrame == this) {return(true);}
    DropItem(GuiManager->DragingFrame, nButton);
  }

  //

  if ((Item = SubFrameList.GetFirst()))
  do
  {
    Frame = (ZFrame *)Item->GetObject();
    if (Absolute_x >= Frame->EffectivePosition.Position_x)
     if (Absolute_y >= Frame->EffectivePosition.Position_y)
       if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width))
         if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height))
         {
           Frame->Event_MouseRelease = true;
           Frame->MouseButtonRelease( nButton, Absolute_x, Absolute_y);
         }

  } while ((Item = SubFrameList.GetNext(Item)));
  return true;
}
Ejemplo n.º 2
0
Bool ZFrame::MouseMove ( float Relative_x, float Relative_y, float Absolute_x, float Absolute_y)
{
  ZListItem * Item;
  ZFrame * Frame;

  GuiManager->MouseOverStack_AddToStack(this);
  if ((Item = SubFrameList.GetFirst()))
  do
  {
    Frame = (ZFrame *)Item->GetObject();
    if (Absolute_x >= Frame->EffectivePosition.Position_x)
      if (Absolute_y >= Frame->EffectivePosition.Position_y)
        if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width))
          if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height))
          {
            if (!Frame->Event_MouseIsActualyOver)
            {
              if (Frame->Flag_Enable_Proc_MouseIn) Frame->MouseIn();
              Frame->Event_MouseWentIn = true;
            }
            Frame->Event_MouseIsActualyOver = true;
            if (Frame->Flag_Enable_Proc_MouseOver) Frame->MouseOver( ((UShort)Frame->EffectivePosition.Position_x) - Absolute_x, ((UShort)Frame->EffectivePosition.Position_y) - Absolute_y );

            Frame->MouseMove( Relative_x, Relative_y , Absolute_x, Absolute_y);
          }
  } while ((Item = SubFrameList.GetNext(Item)));
  return true;
}
Ejemplo n.º 3
0
Bool ZFrame::MouseButtonClick  (UShort nButton, float Absolute_x, float Absolute_y)
{
  ZListItem * Item;
  ZFrame * Frame;


  GuiManager->FocusStack_AddToStack(this);

  // Drag and drop

  if (Flag_Cap_Dragable && nButton == 1 )
  {
    //ZVector2f Dim;
    //GetSize(Dim.x,Dim.y);
    Flag_Draging = true;
    GuiManager->DragingFrame = this;
    DragAbsolutePosition.x = EffectivePosition.Position_x;
    DragAbsolutePosition.y = EffectivePosition.Position_y;
  }

  // Focus

  if (this->Flag_Enable_Proc_GetFocus) GetFocus();

  // Subframe events propagation

  if ((Item = SubFrameList.GetFirst()))
  do
  {
    Frame = (ZFrame *)Item->GetObject();
    if (Absolute_x >= Frame->EffectivePosition.Position_x)
     if (Absolute_y >= Frame->EffectivePosition.Position_y)
       if (Absolute_x <= (Frame->EffectivePosition.Position_x + Frame->EffectivePosition.Width))
         if (Absolute_y <= (Frame->EffectivePosition.Position_y + Frame->EffectivePosition.Height))
         {
           Frame->Event_MouseClick = true;
           Frame->MouseButtonClick( nButton, Absolute_x, Absolute_y);
         }

  } while ((Item = SubFrameList.GetNext(Item)));
  return true;
}
Ejemplo n.º 4
0
ULong ZScreen_Main::ProcessScreen(ZGame * GameEnv)
{

  bool Loop;

  GameEnv->GuiManager.RemoveAllFrames();


  ZFrame TitleBackground;
    TitleBackground.SetPosition(0,0);
    TitleBackground.SetSize( GameEnv->ScreenResolution.x, GameEnv->ScreenResolution.y );
    TitleBackground.SetTexture(0);
    TitleBackground.SetZPosition(50.0f);
    GameEnv->GuiManager.AddFrame(&TitleBackground);

  ZFrame Title;
    ZVector2f Title_Size;
    Title_Size.x = 1000.0f; Title_Size.y = 100.0f;
    Title.SetPosition(GameEnv->ScreenResolution.x / 2.0 - Title_Size.x / 2.0 , GameEnv->ScreenResolution.y / 8.0 );
    Title.SetSize(Title_Size.x,Title_Size.y);
    Title.SetTexture(1);
    Title.SetZPosition(49.0f);
    TitleBackground.AddFrame(&Title);

  ZFrame_FontFrame Frame_Version;
    ZVector2f Version_Size;
    Version_Size.x = 53.0*8.0; Version_Size.y = 8.0;
    Frame_Version.SetPosition(GameEnv->ScreenResolution.x - Version_Size.x , GameEnv->ScreenResolution.y - Version_Size.y );
    Frame_Version.SetSize(53.0*8.0+1.0,100.0);
    Frame_Version.SetZPosition(49.0f);
    Frame_Version.SetDisplayText((char *)COMPILEOPTION_VERSIONSTRING);
    Frame_Version.TextureNum = 3;
    Frame_Version.SetStyle(GameEnv->TileSetStyles->GetStyle(0));
    TitleBackground.AddFrame(&Frame_Version);

  ZFrame_FontFrame Frame_PlayGame;
    ZVector2f PlayGame_Size;
    PlayGame_Size.x = 9.0*32.0 + 1.0; PlayGame_Size.y = 8.0*4.0;
    Frame_PlayGame.SetPosition(GameEnv->ScreenResolution.x / 2.0 - PlayGame_Size.x / 2.0, GameEnv->ScreenResolution.y / 1.64 - 32.0 );
    Frame_PlayGame.SetSize(PlayGame_Size.x+128.0,PlayGame_Size.y);
    Frame_PlayGame.SetZPosition(49.0f);
    Frame_PlayGame.SetDisplayText((char *)"PLAY GAME");
    Frame_PlayGame.TextureNum = 3;
    Frame_PlayGame.SetStyle(GameEnv->TileSetStyles->GetStyle(1));
    TitleBackground.AddFrame(&Frame_PlayGame);
  ZFrame_FontFrame Frame_Options;
    ZVector2f Options_Size;
    Frame_Options.SetDisplayText((char *)"OPTIONS");
    Frame_Options.SetStyle(GameEnv->TileSetStyles->GetStyle(1));
    Frame_Options.GetTextDisplaySize(&Options_Size);
    Frame_Options.SetPosition(GameEnv->ScreenResolution.x / 2.0 - Options_Size.x / 2.0, GameEnv->ScreenResolution.y / 1.64 + 32.0 );
    Frame_Options.SetSize(Options_Size.x+1.0,Options_Size.y);
    Frame_Options.SetZPosition(49.0f);

    Frame_Options.TextureNum = 3;

    TitleBackground.AddFrame(&Frame_Options);

  ZFrame_FontFrame Frame_Quit;
    ZVector2f Frame_Size;
    Frame_Quit.SetDisplayText((char *)"QUIT");
    Frame_Quit.SetStyle(GameEnv->TileSetStyles->GetStyle(1));
    Frame_Quit.GetTextDisplaySize(&Frame_Size);
    Frame_Quit.SetPosition(GameEnv->ScreenResolution.x / 2.0 - Frame_Size.x / 2.0, GameEnv->ScreenResolution.y / 1.64 + 96.0  );
    Frame_Quit.SetSize(Frame_Size.x+1.0,Frame_Size.y);
    Frame_Quit.SetZPosition(49.0f);

    Frame_Quit.TextureNum = 3;

    TitleBackground.AddFrame(&Frame_Quit);
  //printf("FrameAdress : %lx\n",(unsigned int)&Frame_PlayGame);

  for (Loop = true; Loop; )
  {
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glAlphaFunc(GL_GREATER, 0.2);
    glEnable(GL_ALPHA_TEST);
    glEnable(GL_TEXTURE_2D);
    Loop = GameEnv->EventManager.ProcessEvents();

    if (Frame_PlayGame.Is_MouseIn() )   { Frame_PlayGame.SetColor(0.5f,0.5f,1.0f); }
    if (Frame_PlayGame.Is_MouseOut())   { Frame_PlayGame.SetColor(1.0f,1.0f,1.0f); }
    if (Frame_Options.Is_MouseIn() )    { Frame_Options.SetColor(0.5f,0.5f,1.0f); }
    if (Frame_Options.Is_MouseOut())    { Frame_Options.SetColor(1.0f,1.0f,1.0f); }
    if (Frame_Quit.Is_MouseIn() )       { Frame_Quit.SetColor(0.5f,0.5f,1.0f); }
    if (Frame_Quit.Is_MouseOut())       { Frame_Quit.SetColor(1.0f,1.0f,1.0f); }
    if (Frame_PlayGame.Is_MouseClick()) {Loop = false; ResultCode = CHOICE_PLAYGAME;  }
    if (Frame_Options.Is_MouseClick())  {Loop = false; ResultCode = CHOICE_OPTIONS; }
    if (Frame_Quit.Is_MouseClick())     {Loop = false; ResultCode = CHOICE_QUIT; }
    GameEnv->GuiManager.Render();
    SDL_GL_SwapBuffers( );
    SDL_Delay(10);

  }
  GameEnv->GuiManager.RemoveAllFrames();
  return(ResultCode);
}
Ejemplo n.º 5
0
void ZPanelTextButton::Render(ZRender_Interface *render, Frame_Dimensions * ParentPosition, uintptr_t psvInit )
{

  ZVector3f P1,P2,P3,P4;
  ZVector3f P1m,P2m,P3m,P4m;
  float SliceWidth;

  ZListItem * Item;
  ZFrame * Frame;

  // Frame Position Computing
  if (Flag_Show_Master)
  {
    EffectivePosition.Position_x = ParentPosition->Position_x + Dimensions.Position_x;
    EffectivePosition.Position_y = ParentPosition->Position_y + Dimensions.Position_y;
    EffectivePosition.Position_z = ParentPosition->Position_z + Dimensions.Position_z;
    EffectivePosition.Width = Dimensions.Width;
    EffectivePosition.Height= Dimensions.Height;
    EffectivePosition.Depth = Dimensions.Depth;

    if (this->Flag_Draging) { EffectivePosition.Position_x = DragAbsolutePosition.x; EffectivePosition.Position_y = DragAbsolutePosition.y; }

    // Render this frame

    if (Flag_Show_Frame)
    {
/*
      P1.x = EffectivePosition.Position_x; P1.y = EffectivePosition.Position_y; P1.z = EffectivePosition.Position_z;
      P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P2.y = EffectivePosition.Position_y ; P2.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P3.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P4.x = EffectivePosition.Position_x; P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P4.z = EffectivePosition.Position_z + EffectivePosition.Depth;
*/

      P1.x = EffectivePosition.Position_x; P1.y = EffectivePosition.Position_y; P1.z = EffectivePosition.Position_z;
      P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P2.y = EffectivePosition.Position_y ; P2.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P3.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P4.x = EffectivePosition.Position_x; P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P4.z = EffectivePosition.Position_z + EffectivePosition.Depth;

      ULong TextureRef = GuiManager->TextureManager->GetTextureEntry(this->TextureNum)->OpenGl_TextureRef[psvInit];
      glBindTexture(GL_TEXTURE_2D,TextureRef );

      SliceWidth = EffectivePosition.Height * 0.25f;

      // The left slice

      P1m.x = P1.x; P1m.y = P1.y; P1m.z = P1.z;
      P2m.x = P1.x + SliceWidth ; P2m.y = P2.y; P2m.z = P2.z;
      P3m.x = P1.x + SliceWidth ; P3m.y = P3.y; P3m.z = P3.z;
      P4m.x = P4.x; P4m.y = P4.y; P4m.z = P4.z;

      glBegin(GL_TRIANGLES);
        glColor3f(DrawColor.r, DrawColor.v, DrawColor.b);
        glTexCoord2f(0.0,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
        glTexCoord2f(0.25,0.0); glVertex3f(P2m.x, P2m.y , P2m.z);
        glTexCoord2f(0.25,1.0); glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(0.25,1.0); glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(0.0,1.0);  glVertex3f(P4m.x, P4m.y , P4m.z);
        glTexCoord2f(0.0,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
      glEnd();

      // Right slice

      P1m.x = P2.x-SliceWidth; P1m.y = P1.y; P1m.z = P1.z;
      P2m.x = P2.x; P2m.y = P2.y; P2m.z = P2.z;
      P3m.x = P3.x; P3m.y = P3.y; P3m.z = P3.z;
      P4m.x = P3.x-SliceWidth; P4m.y = P4.y; P4m.z = P4.z;
      glBegin(GL_TRIANGLES);
        //glColor3f(DrawColor.r, DrawColor.v, DrawColor.b);
        glTexCoord2f(0.75,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
        glTexCoord2f(1.0,0.0);   glVertex3f(P2m.x, P2m.y , P2m.z);
        glTexCoord2f(1.0,1.0);   glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(1.0,1.0);   glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(0.75,1.0);  glVertex3f(P4m.x, P4m.y , P4m.z);
        glTexCoord2f(0.75,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
      glEnd();

      // Middle slice

      P1m.x = P1.x+SliceWidth; P1m.y = P1.y; P1m.z = P1.z;
      P2m.x = P2.x-SliceWidth; P2m.y = P2.y; P2m.z = P2.z;
      P3m.x = P3.x-SliceWidth; P3m.y = P3.y; P3m.z = P3.z;
      P4m.x = P4.x+SliceWidth; P4m.y = P4.y; P4m.z = P4.z;
      glBegin(GL_TRIANGLES);
        //glColor3f(DrawColor.r, DrawColor.v, DrawColor.b);
        glTexCoord2f(0.25,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
        glTexCoord2f(0.75,0.0);  glVertex3f(P2m.x, P2m.y , P2m.z);
        glTexCoord2f(0.75,1.0);  glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(0.75,1.0);  glVertex3f(P3m.x, P3m.y , P3m.z);
        glTexCoord2f(0.25,1.0);  glVertex3f(P4m.x, P4m.y , P4m.z);
        glTexCoord2f(0.25,0.0);  glVertex3f(P1m.x, P1m.y , P1m.z);
      glEnd();

    }


    // Render child frames

    if (Flag_Show_Childs)
    {
      //SubFrameList.Dump();
      Item = SubFrameList.GetFirst();
      while (Item)
      {
        Frame = (ZFrame *)Item->GetObject();
        if (Frame) Frame->Render(render, &EffectivePosition, psvInit );

        Item = SubFrameList.GetNext(Item);
      }
    }

  }

}
Ejemplo n.º 6
0
void ZFrame::Render(ZRender_Interface *render, Frame_Dimensions * ParentPosition, uintptr_t psvInit)
{
	struct {
		ZVector3f P1,P2,P3,P4;
	}P;
  ZListItem * Item;
  ZFrame * Frame;

  // Frame Position Computing
  if (Flag_Show_Master)
  {
    EffectivePosition.Position_x = ParentPosition->Position_x + Dimensions.Position_x;
    EffectivePosition.Position_y = ParentPosition->Position_y + Dimensions.Position_y;
    EffectivePosition.Position_z = ParentPosition->Position_z + Dimensions.Position_z;
    EffectivePosition.Width = Dimensions.Width;
    EffectivePosition.Height= Dimensions.Height;
    EffectivePosition.Depth = Dimensions.Depth;

    if (this->Flag_Draging) { EffectivePosition.Position_x = DragAbsolutePosition.x; EffectivePosition.Position_y = DragAbsolutePosition.y; }

    // Render this frame

    if (Flag_Show_Frame)
    {

      P.P1.x = EffectivePosition.Position_x; P.P1.y = EffectivePosition.Position_y; P.P1.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P.P2.x = EffectivePosition.Position_x + EffectivePosition.Width ; P.P2.y = EffectivePosition.Position_y ; P.P2.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P.P3.x = EffectivePosition.Position_x + EffectivePosition.Width ; P.P3.y = EffectivePosition.Position_y + EffectivePosition.Height; P.P3.z = EffectivePosition.Position_z + EffectivePosition.Depth;
      P.P4.x = EffectivePosition.Position_x; P.P4.y = EffectivePosition.Position_y + EffectivePosition.Height; P.P4.z = EffectivePosition.Position_z + EffectivePosition.Depth;

      ULong TextureRef = GuiManager->TextureManager->GetTextureEntry(this->TextureNum)->OpenGl_TextureRef[psvInit];
	  float coords[18];
	  float tex_coords[12];
		tex_coords[0] = 0.0; tex_coords[1] = 0.0;   coords[0] = P.P1.x; coords[1] = P.P1.y; coords[2] = P.P1.z; 
		tex_coords[2] = 1.0f; tex_coords[3] = 0.0;  coords[3] = P.P2.x; coords[4] = P.P2.y; coords[5] = P.P2.z; 
		tex_coords[4] = 1.0f; tex_coords[5] = 1.0f; coords[6] = P.P3.x; coords[7] = P.P3.y; coords[8] = P.P3.z; 
		tex_coords[6] = 1.0f; tex_coords[7] = 1.0f; coords[9] = P.P3.x; coords[10] = P.P3.y; coords[11] = P.P3.z; 
		tex_coords[8] = 0.0; tex_coords[9] = 1.0f;  coords[12] = P.P4.x; coords[13] = P.P4.y; coords[14] = P.P4.z; 
		tex_coords[10] = 0.0; tex_coords[11] = 0.0; coords[15] = P.P1.x; coords[16] = P.P1.y; coords[17] = P.P1.z; 
		//lprintf( "%3d %g,%g,%g %g,%g,%g", TextureRef, P.P1.x, P.P1.y, P.P1.z, P.P3.x, P.P3.y, P.P3.z );
	  render->gui_shader->Draw( TextureRef, &DrawColor.r, coords, tex_coords );
	  /*
      glBindTexture(GL_TEXTURE_2D,TextureRef );
      glBegin(GL_TRIANGLES);
        glColor3f(DrawColor.r, DrawColor.v, DrawColor.b);
        glTexCoord2f(0.0,0.0); glVertex3f(P1.x, P1.y , P1.z);
        glTexCoord2f(1.0,0.0); glVertex3f(P2.x, P2.y , P2.z);
        glTexCoord2f(1.0,1.0); glVertex3f(P3.x, P3.y , P3.z);
        glTexCoord2f(1.0,1.0);glVertex3f(P3.x, P3.y , P3.z);
        glTexCoord2f(0.0,1.0);glVertex3f(P4.x, P4.y , P4.z);
        glTexCoord2f(0.0,0.0);glVertex3f(P1.x, P1.y , P1.z);
      glEnd();
	  */
    }


    // Render child frames

    if (Flag_Show_Childs)
    {
      //SubFrameList.Dump();
      Item = SubFrameList.GetFirst();
      while (Item)
      {
        Frame = (ZFrame *)Item->GetObject();
        if (Frame) Frame->Render(render, &EffectivePosition, psvInit);

        Item = SubFrameList.GetNext(Item);
      }
    }

  }

}
ULong ZScreen_ModeSelection::ProcessScreen(ZGame * GameEnv)
{
  ZVector2f Size;
  ZString As;
  ULong i;
  bool Loop, Redisplay;
  ULong ChoosedSlot=0;
  ULong SlotOffset=0;

// Clear the Screen

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); SDL_GL_SwapBuffers( );



  do
  {
    Redisplay = false;

    // Enlever toutes les boites affichées

    GameEnv->GuiManager.RemoveAllFrames();

    // Définition et réglage de la boite du fond

    ZFrame Background;
    if (!GameEnv->Settings_Hardware->Setting_OldLooked)
    {
      Background.SetPosition(0.0f,0.0f);
      Background.SetSize(GameEnv->ScreenResolution.x, GameEnv->ScreenResolution.y);
      Background.SetTexture(20);
      GameEnv->GuiManager.AddFrame(&Background);
    }

    // Définition du titre

    ZFrame LogoBlackvoxel;
    if (GameEnv->Settings_Hardware->Setting_OldLooked)
    {
      Size.y = GameEnv->ScreenResolution.y * 0.1f;
      Size.x = Size.y * 10.0f;
      LogoBlackvoxel.SetPosition(GameEnv->ScreenResolution.x / 2.0f - Size.x/2.0f, GameEnv->ScreenResolution.y *0.01f);
      LogoBlackvoxel.SetSize(Size.x, Size.y);
      LogoBlackvoxel.SetTexture(1);
      GameEnv->GuiManager.AddFrame(&LogoBlackvoxel);
    }

    // Définition et réglage du sous-titre

    ZFrame_FontFrame Frame_MainTitle;
    Frame_MainTitle.SetDisplayText((char *)"GAME MODE SELECTION");
    Frame_MainTitle.SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR4));
    Frame_MainTitle.GetTextDisplaySize(&Size);
    Frame_MainTitle.SetPosition(GameEnv->ScreenResolution.x * 0.05f , GameEnv->ScreenResolution.y *0.26f );
    Frame_MainTitle.SetSize(Size.x+1.0f,Size.y+1.0f);
    GameEnv->GuiManager.AddFrame(&Frame_MainTitle);

    // Définition des variables et objets utilisés pour la suite

    ZFrame Slot[ZMODESELECTION_SLOTCOUNT];
    ZFrame_FontFrame SlotTitle[ZMODESELECTION_SLOTCOUNT];
    ZString SlotString[ZMODESELECTION_SLOTCOUNT];
    ZString SlotTextString[ZMODESELECTION_SLOTCOUNT];
    ZString SlotClickString[ZMODESELECTION_SLOTCOUNT];
    ZFrame_FontFrame SlotText[ZMODESELECTION_SLOTCOUNT];
    ZFrame_FontFrame SlotClick[ZMODESELECTION_SLOTCOUNT];

    // Loop for settings of choice boxes for universe selection.

    for (i=0;i<2;i++)
    {

      // Set parameters of the universe slot box.

      ZVector2f SlotPos,SlotSize;

      //SlotPos.y = (i / 4 * (GameEnv->ScreenResolution.y / 4.3f)) + ( i/ 8 * (GameEnv->ScreenResolution.y * 0.05f) ) + (float)GameEnv->ScreenResolution.y * 0.025f;
      SlotSize.x = GameEnv->ScreenResolution.x / 2.8f; // 2.2f
      SlotSize.y = GameEnv->ScreenResolution.y / 2.3f; // 2.1f
      SlotSize.x = floor(SlotSize.x); // Help to make a better texture display
      SlotSize.y = floor(SlotSize.y);

      // SlotPos.x = (float)(i * ((float)GameEnv->ScreenResolution.x) * 0.5f) + ((float)GameEnv->ScreenResolution.x)*0.25f - SlotSize.x*0.5f;
      SlotPos.x = (((float)GameEnv->ScreenResolution.x) * 0.5f);
      if (i==0) SlotPos.x-= SlotSize.x + (((float)GameEnv->ScreenResolution.x) * 0.045f) ;
      else      SlotPos.x+=              (((float)GameEnv->ScreenResolution.x) * 0.045f);
      SlotPos.y = (float)GameEnv->ScreenResolution.y * 0.40f;
      // SlotPos.x = (float)(i * ((float)GameEnv->ScreenResolution.x) * 0.5) + ((float)GameEnv->ScreenResolution.x)*0.020f ;
      // SlotPos.y = (float)GameEnv->ScreenResolution.y * 0.35f;
      SlotPos.x = floor(SlotPos.x); // Help to make a better texture display
      SlotPos.y = floor(SlotPos.y);


      if (i==0) Slot[i].SetTexture(21);
      else      Slot[i].SetTexture(23);


      Slot[i].SetPosition( SlotPos.x , SlotPos.y );
      Slot[i].SetSize(SlotSize.x, SlotSize.y );
      GameEnv->GuiManager.AddFrame(&Slot[i]);
      //Background.AddFrame(&Slot[i]);

      // Régler les paramètres de la boite du texte slot univers

      switch(i)
      {
        case 0: SlotString[i] = "ADVENTURE"; break;
        case 1: SlotString[i] = "SCHOOL MODE";    break;
      }
      SlotTitle[i].SetDisplayText(SlotString[i].String);
      SlotTitle[i].SetTexture(3);
      SlotTitle[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR4));
      SlotTitle[i].GetTextDisplaySize(&Size);
      SlotTitle[i].SetPosition(SlotSize.x * 0.07f, SlotSize.y * 0.1f);
      // SlotTitle[i].SetPosition(SlotSize.x / 2 - Size.x/2, SlotSize.y * 0.2f);
      SlotTitle[i].SetSize(Size.x+1.0f, Size.y);
      #ifdef COMPILEOPTION_ONLYSCHOOLMODE
        if (i==1) SlotTitle[i].SetColor(1.0f,1.0f,1.0f);
        else      SlotTitle[i].SetColor(0.6f,0.6f,0.6f);
      #else
        SlotText[i].SetColor(1.0f,1.0f,1.0f);
      #endif
      Slot[i].AddFrame(&SlotTitle[i]);

      // Slot Text

      switch(i)
      {
        case 0: SlotTextString[i]  = "* FOR PLAYING THE GAME\n\n";
                SlotTextString[i] << "* FACTORY CREATION\n\n";
                SlotTextString[i] << "* BIG UNLIMITED WORLD\n\n";
                SlotTextString[i] << "* DIFFERENT LANDSCAPES\n\n";
                SlotTextString[i] << "* EQUIPMENTS MUST BE MANUFACTURED\n\n";
                SlotTextString[i] << "* INTENDED FOR GAMERS\n\n";
                #ifdef COMPILEOPTION_ONLYSCHOOLMODE
                SlotTextString[i] << "~1:FF0000:";
                #endif
                SlotTextString[i] << "* ONLY IN FULL VERSION\n\n";
                break;

        case 1: SlotTextString[i]  = "* FOR TEACHING PROGRAMMING\n\n";
                SlotTextString[i] << "* DIRECT ACCESS TO ALL AUTOMATION\n\n";
                SlotTextString[i] << "* ONLY BLUE GRID\n\n";
                SlotTextString[i] << "* LIMITED SIZE UNIVERSE\n\n";
                SlotTextString[i] << "* INTENDED FOR SCHOOLS AND TEATCHERS\n\n";
                break;
      }

      SlotText[i].SetDisplayText(SlotTextString[i].String);
      SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(1));
      SlotText[i].SetTexture(3);
      if      (GameEnv->ScreenResolution.x >  1920)  { SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR2));}
      else if (GameEnv->ScreenResolution.x >= 1800)  { SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_2));}
      else if (GameEnv->ScreenResolution.x >  1024)  { SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR2));}
      else if (GameEnv->ScreenResolution.x == 1024)  { SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_1));}
      else                                           { SlotText[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR2));}

      SlotText[i].GetTextDisplaySize(&Size);
      SlotText[i].SetPosition(SlotSize.x * 0.07f, SlotSize.y * 0.25f);
      SlotText[i].SetSize(Size.x+1.0f, Size.y);

      #ifdef COMPILEOPTION_ONLYSCHOOLMODE
        if (i==1) SlotText[i].SetColor(1.0f,1.0f,1.0f);
        else      SlotText[i].SetColor(0.6f,0.6f,0.6f);
      #else
        SlotText[i].SetColor(1.0f,1.0f,1.0f);
      #endif
      Slot[i].AddFrame(&SlotText[i]);

      #ifdef COMPILEOPTION_ONLYSCHOOLMODE
        SlotClickString[i] = "CLICK HERE TO BUY FULL VERSION";
        SlotClick[i].SetDisplayText(SlotClickString[i].String);
        SlotClick[i].SetTexture(3);
        SlotClick[i].SetStyle(GameEnv->TileSetStyles->GetStyle(ZGame::FONTSIZE_VAR2));
        SlotClick[i].GetTextDisplaySize(&Size);
        SlotClick[i].SetPosition( (SlotSize.x / 2.0f) - (Size.x / 2.0f) , SlotSize.y * 0.81f);
        printf("SlotSize.x = %f\n",SlotSize.x);
        SlotClick[i].SetSize(Size.x+1.0f, Size.y);
        SlotClick[i].SetColor(0.0f,1.0f,0.0f);
        if (i==0) Slot[i].AddFrame(&SlotClick[i]);
      #endif
    }

  // Display loop and event management

    for (Loop = true; Loop; )
    {
      // Effacer l'écran

      glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
      glAlphaFunc(GL_GREATER, 0.05);

      // Manage inbound events (clicks, mous move, key stroke)

      Loop = GameEnv->EventManager.ProcessEvents();

      // Detect user action on each choice box and take according  actions.

      for(i=0;i<2;i++)
      {
        #ifdef COMPILEOPTION_ONLYSCHOOLMODE
        //if (i!=0)
        #endif
        if (Slot[i].Is_MouseIn())
        {
          Slot[i].SetTexture( (!i) ? 22 : 24 );
          if (i==0) SlotClick[i].SetColor(1.0f,1.0f,1.0f);
        }
        if (Slot[i].Is_MouseOut())
        {
          Slot[i].SetTexture( (!i) ? 21 : 23 );
          if (i==0) SlotClick[i].SetColor(0.0f,1.0f,0.0f);
        }
        if (Slot[i].Is_MouseClick())
        {
          ChoosedSlot = i;
          Loop = false;
          #ifdef COMPILEOPTION_ONLYSCHOOLMODE
          if (i==0) { ZViewDoc::OpenURL((char *)"https://www.blackvoxel.com/view.php?node=1717"); Loop = true; }
          #endif
        }
      }

      // Ask the Gui manager to render all boxes.

      GameEnv->GuiManager.Render();

      // Show the work to the user.

      SDL_GL_SwapBuffers();

      // Wait for 10 milliseconds in order to avoid over refreshing.
      // Over refreshing in the menu screens would be a waste of power.

      SDL_Delay(10);
    }

    // Remove all boxes from the display.

    GameEnv->GuiManager.RemoveAllFrames();

  } while (Redisplay);

  // Return to sender with the choosed game mode.

  return(ChoosedSlot+SlotOffset);
}