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; }
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; }
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; }
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); }
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); } } } }
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); }