www.pudn.com > coolMEMORY.rar > GameMenu.cpp
//-----------------------------------------------------------------------------
// File: GameMenu.cpp
//-----------------------------------------------------------------------------
#include "AS\AS_Engine.h"
#include "ModuleHeaders.h"
// Variables: *****************************************************************
char **pbyFoundCardStyle; // The names of the found card styles folders
char **pbyFoundCardStyleName; // The names of the found card styles (language dependent)
int iFoundCardStyles; // The number of found card styles
cELEMENT cP1, cP1Human, cP1ComputerEasy, cP1ComputerNormal, cP1ComputerClever,
cP2, cP2Human, cP2ComputerEasy, cP2ComputerNormal, cP2ComputerClever,
cP3, cP3Human, cP3ComputerEasy, cP3ComputerNormal, cP3ComputerClever,
cP4, cP4Human, cP4ComputerEasy, cP4ComputerNormal, cP4ComputerClever;
cELEMENT *cPlayerButton[4][4] = {{&cP1Human, &cP1ComputerEasy, &cP1ComputerNormal, &cP1ComputerClever},
{&cP2Human, &cP2ComputerEasy, &cP2ComputerNormal, &cP2ComputerClever},
{&cP3Human, &cP3ComputerEasy, &cP3ComputerNormal, &cP3ComputerClever},
{&cP4Human, &cP4ComputerEasy, &cP4ComputerNormal, &cP4ComputerClever}};
cELEMENT cCardPairsSlider, cCardPairsText, cCardStyleLast, cCardStyleNext,
cCardStyleText, cThinkTime, cThinkTimeSlider;
cELEMENT cStart, cAdvancedOptions, cQuit;
cELEMENT *cButtonList[MENU_BUTTONS] =
{&cP1, &cP1Human, &cP1ComputerEasy, &cP1ComputerNormal, &cP1ComputerClever,
&cP2, &cP2Human, &cP2ComputerEasy, &cP2ComputerNormal, &cP2ComputerClever,
&cP3, &cP3Human, &cP3ComputerEasy, &cP3ComputerNormal, &cP3ComputerClever,
&cP4, &cP4Human, &cP4ComputerEasy, &cP4ComputerNormal, &cP4ComputerClever,
&cCardPairsSlider, &cCardPairsText, &cCardStyleLast, &cCardStyleNext,
&cCardStyleText, &cThinkTime, &cThinkTimeSlider, &cStart, &cAdvancedOptions, &cQuit};
// For the animated main menu background:
long lGameMenuBackgroundAniTimer,
lBackFlashTimeDelay, lBackFlashTime;
int iGameMenuBackgroundAniStep;
float fLastBackFlash, fBackFlash, fCurrentBackFlash, fBackFlashDelta;
///////////////////////////////////////////////////////////////////////////////
// Functions: *****************************************************************
HRESULT GameMenu(void);
HRESULT GameMenuCheck(AS_WINDOW *);
HRESULT GameMenuDraw(AS_WINDOW *);
void EnumerateCardStyles(void);
void DestroyFoundCardStyles(void);
void SetStandartMenuCamera(void);
void InitGameMenuElements(void);
void InitGameMenuElementsLanguage(void);
void DrawGameMenuElements(AS_WINDOW *);
void CheckGameMenuElements(void);
void P1Button(void);
void P2Button(void);
void P3Button(void);
void P4Button(void);
void P1HumanButton(void);
void P1ComputerEasyButton(void);
void P1ComputerNormalButton(void);
void P1ComputerCleverButton(void);
void P2HumanButton(void);
void P2ComputerEasyButton(void);
void P2ComputerNormalButton(void);
void P2ComputerCleverButton(void);
void P3HumanButton(void);
void P3ComputerEasyButton(void);
void P3ComputerNormalButton(void);
void P3ComputerCleverButton(void);
void P4HumanButton(void);
void P4ComputerEasyButton(void);
void P4ComputerNormalButton(void);
void P4ComputerCleverButton(void);
void CardPairsSlider(void);
void CardStyleLast(void);
void CardStyleNext(void);
void LoadNewCardStyle(int);
void ThinkTimeButton(void);
void ThinkTimeSlider(void);
void StartButton(void);
void AdvancedOptionsButton(void);
void QuitButton(void);
void MusicNext(void);
///////////////////////////////////////////////////////////////////////////////
// cELEMENT functions: ********************************************************
void cELEMENT::Draw(void)
{ // begin cELEMENT::Draw()
if(!bVisible)
return;
glPushMatrix();
glTranslatef(vWorldPos.fX, vWorldPos.fY, vWorldPos.fZ);
glScalef(vSize.fX*2, vSize.fY*2, vSize.fZ*2);
glDisable(GL_BLEND);
if(_ASConfig->bMultitexturing)
{
glActiveTextureARB(GL_TEXTURE1_ARB);
if(bActive)
glColor3f(0.9f, 0.9f, 0.9f);
else
glColor3f(0.4f, 0.4f, 0.4f);
glBindTexture(GL_TEXTURE_2D, GameTexture[5].iOpenGLID);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glActiveTextureARB(GL_TEXTURE0_ARB);
}
if(bActive)
glColor3f(1.0f, 1.0f, 1.0f);
else
glColor3f(0.2f, 0.2f, 0.2f);
switch(eType)
{
case CHECK_ELEMENT: case BUTTON_ELEMENT: case SLIDER_ELEMENT:
// Front side:
glColor4f(bActive*0.3f, bActive*0.3f, bActive*0.3f, 0.5f);
glDisable(GL_CULL_FACE);
glBindTexture(GL_TEXTURE_2D, GameTexture[5].iOpenGLID);
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBegin(GL_QUADS);
// Main part:
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
// Top:
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(-0.7f, -0.7f);
glVertex2f(0.7f, -0.7f);
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(-0.5f, -0.5f);
// Left:
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(-0.7f, 0.9f);
glVertex2f(-0.7f, -0.7f);
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(-0.5f, -0.5f);
glVertex2f(-0.5f, 0.5f);
// Right:
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(0.7f, 0.9f);
glVertex2f(0.7f, -0.7f);
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glVertex2f(0.5f, 0.5f);
// Bottom:
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glVertex2f(0.5f, 0.5f);
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(0.7f, 0.9f);
glVertex2f(-0.7f, 0.9f);
// Bottom:
glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glVertex2f(0.5f, 0.5f);
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
glVertex2f(0.7f, -0.9f);
glVertex2f(-0.7f, -0.9f);
glEnd();
glDisable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glEnable(GL_DEPTH_TEST);
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glEnable(GL_CULL_FACE);
// Is it checked??
if(bChecked)
{
glBindTexture(GL_TEXTURE_2D, GameTexture[3].iOpenGLID);
if(bActive)
glColor3f(0.6f, 0.6f, 0.6f);
else
glColor3f(0.2f, 0.2f, 0.2f);
if(eType == CHECK_ELEMENT && bRound)
{
glScalef(0.7f+vAniPos.fX/300, 0.7f+vAniPos.fY/300, 0.7f+vAniPos.fZ/300);
glCallList(iSphereList);
}
else
{
glScalef(1.4f, 1.4f, 1.4f);
glRotatef(vAniPos.fX, 0.0f, 1.0f, 0.0f);
glRotatef(vAniPos.fY/2, 0.0f, 1.0f, 0.0f);
glRotatef(vAniPos.fZ/2, 0.0f, 0.0f, 1.0f);
glCullFace(GL_FRONT);
ASDrawMd2Frame(pCheckedModel, 0);
glCullFace(GL_BACK);
}
}
break;
}
glPopMatrix();
if(eType == SLIDER_ELEMENT)
{ // Draw the slider:
glPushMatrix();
if(bActive)
glColor3f(0.3f, 0.3f, 0.3f);
else
glColor3f(0.1f, 0.1f, 0.1f);
glBindTexture(GL_TEXTURE_2D, GameTexture[3].iOpenGLID);
glTranslatef((float) (iCurrentSliderPos-iSliderMin)/(iSliderMax-iSliderMin)*vSize.fX*2, 0.0f, 0.0f);
glTranslatef(vWorldPos.fX-vSize.fX, vWorldPos.fY, vWorldPos.fZ);
glScalef(1.0f, vSize.fY*2, 1.0f);
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
glCullFace(GL_FRONT);
ASDrawMd2Frame(pSliderModel, 0);
glCullFace(GL_BACK);
glPopMatrix();
}
if(_ASConfig->bMultitexturing)
{
glActiveTextureARB(GL_TEXTURE1_ARB);
glDisable(GL_TEXTURE_2D);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glActiveTextureARB(GL_TEXTURE0_ARB);
}
if(_AS->bCompiledVertexArraySupported)
glUnlockArraysEXT();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} // end cELEMENT::Draw()
void cELEMENT::DrawText(AS_WINDOW *pWindow)
{ // begin cELEMENT::DrawText()
double fModelViewMatrix[16], fProjectionMatrix[16], dWinX, dWinY, dWinZ;
int iViewport[4];
if(!bVisible)
return;
glGetDoublev(GL_MODELVIEW_MATRIX, fModelViewMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, fProjectionMatrix);
iViewport[0] = iViewport[1] = 0;
iViewport[2] = 640;
iViewport[3] = 480;
switch(eType)
{
case CHECK_ELEMENT: case BUTTON_ELEMENT: case SLIDER_ELEMENT: case TEXT_ELEMENT:
if(eType == CHECK_ELEMENT)
gluProject(vWorldPos.fX+vSize.fX, vWorldPos.fY+vSize.fY/1.4f, vWorldPos.fZ, fModelViewMatrix, fProjectionMatrix, iViewport, &dWinX, &dWinY, &dWinZ);
else
gluProject(vWorldPos.fX, vWorldPos.fY+vSize.fY, vWorldPos.fZ, fModelViewMatrix, fProjectionMatrix, iViewport, &dWinX, &dWinY, &dWinZ);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
if(bActive || bRound)
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
else
glColor4f(0.5f, 0.5f, 0.5f, 0.5f);
if(eType == CHECK_ELEMENT)
pWindow->PrintAnimated((int) dWinX, (int) dWinY, byText, 0, 1.0f, fFontAni, 0);
else
pWindow->PrintAnimated((int) dWinX, (int) dWinY, byText, 0, 1.0f, fFontAni, 1);
glEnable(GL_DEPTH_TEST);
break;
}
} // end cELEMENT::DrawText()
void cELEMENT::Check(void)
{ // begin cELEMENT::Check()
int i;
if(!bVisible || !bActive)
return;
if(vMouseWorldPos.fX > vWorldPos.fX-vSize.fX &&
vMouseWorldPos.fY > vWorldPos.fY-vSize.fY &&
vMouseWorldPos.fX < vWorldPos.fX+vSize.fX &&
vMouseWorldPos.fY < vWorldPos.fY+vSize.fY)
{ // The mouse is on the button:
if(eType == SLIDER_ELEMENT)
{ // Check the slider:
if(ASMouse.byButtons[0])
{
iCurrentSliderPos = (int) -((vWorldPos.fX-vSize.fX-vMouseWorldPos.fX)/vSize.fX/2*(iSliderMax-iSliderMin)-1.5f);
if(iCurrentSliderPos < iSliderMin)
iCurrentSliderPos = iSliderMin;
if(iCurrentSliderPos > iSliderMax)
iCurrentSliderPos = iSliderMax;
if(pLeftMouseButton)
pLeftMouseButton();
}
}
else
{
if(ASMouse.bFirstButtons[0])
{
if(!bRound)
{
if(eType != BUTTON_ELEMENT)
bChecked = !bChecked;
}
else
bChecked = TRUE;
if(pLeftMouseButton)
pLeftMouseButton();
}
}
}
// Animate:
for(i = 0; i < 3; i++)
{
vAniPos.fV[i] += (float) vAniSpeed.fV[i]*g_lDeltatime/50;
if(vAniLastPos.fV[i] > vAniNewPos.fV[i])
{
vAniSpeed.fV[i] -= g_lDeltatime/30;
if(vAniPos.fV[i] <= vAniNewPos.fV[i])
{
vAniSpeed.fV[i] *= 0.5f;
vAniLastPos.fV[i] = vAniPos.fV[i];
if((rand() % 2))
vAniNewPos.fV[i] = (float) (rand() % 100)/10.0f;
else
vAniNewPos.fV[i] = -(float) (rand() % 100)/10.0f;
}
}
else
{
vAniSpeed.fV[i] += g_lDeltatime/30;
if(vAniPos.fV[i] >= vAniNewPos.fV[i])
{
vAniSpeed.fV[i] *= 0.5f;
vAniLastPos.fV[i] = vAniPos.fV[i];
if((rand() % 2))
vAniNewPos.fV[i] = (float) (rand() % 100)/10.0f;
else
vAniNewPos.fV[i] = -(float) (rand() % 100)/10.0f;
}
}
}
} // end cELEMENT::Check()
///////////////////////////////////////////////////////////////////////////////
HRESULT GameMenu(void)
{ // begin GameMenu()
MSG msg;
_AS->WriteLogMessage("Enter game menu module");
_AS->bDraw = FALSE;
_AS->pWindow[GAME_WINDOW_ID].SetDrawFunction(GameMenuDraw);
_AS->pWindow[GAME_WINDOW_ID].SetCheckFunction(GameMenuCheck);
_AS->iActiveLights = 0;
_ASCamera->SetStandartCamera();
EnumerateCardStyles();
InitGameMenuElements();
SetStandartMenuCamera();
g_lGameTimer = 0;
lGameMenuBackgroundAniTimer = lBackFlashTimeDelay = lBackFlashTime = g_lGameTimer;
_AS->bDraw = TRUE;
// Go into the game loop:
_AS->WriteLogMessage("Enter the game menu loop");
for(;;)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
if(!GetMessage(&msg, NULL, 0, 0))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if(_AS->GetShutDown() || _AS->CheckModuleChange())
PostQuitMessage(0);
if(!_AS->GetActive())
continue;
_AS->UpdateWindows();
}
}
_AS->WriteLogMessage("Left the game game loop");
DestroyFoundCardStyles();
_AS->bDraw = FALSE;
// Left the game module:
return msg.wParam;
} // end GameMenu()
HRESULT GameMenuDraw(AS_WINDOW *pWindow)
{ // begin GameDraw()
if(!_AS->bDraw)
return 0;
// Setup general stuff:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Setup normal projection:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.f+_ASCamera->fWaterScale[0],
(float) (_ASConfig->iWindowWidth+_ASCamera->fWaterScale[1])/(float) (_ASConfig->iWindowHeight+_ASCamera->fWaterScale[2]), 10.0f, 150.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
SetupLights();
// Draw background:
glBindTexture(GL_TEXTURE_2D, GameTexture[6].iOpenGLID);
glDisable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glColor3f(1.0f, 1.0f, 1.0f);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -24.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-15.0f, -11.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 15.0f, -11.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 15.0f, 11.0f);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-15.0f, 11.0f);
glEnd();
// Draw the water background:
glColor4f(fCurrentBackFlash, fCurrentBackFlash, 0.5f+fCurrentBackFlash, 0.5f);
glEnable(GL_BLEND);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -34.0f);
glBindTexture(GL_TEXTURE_2D, Caust1Texture[iGameMenuBackgroundAniStep].iOpenGLID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-15.0f, -11.0f, 10.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(15.0f, -11.0f, 10.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(15.0f, 11.0f, 10.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-15.0f, 11.0f, 10.0f);
glEnd();
glEnable(GL_DEPTH_TEST);
// Setup camera:
_ASCamera->SetCameraTranslation(FALSE);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glMateriali(GL_FRONT, GL_SHININESS,128);
ASEnableLighting();
glEnable(GL_LIGHTING);
GLfloat LightAmbient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat LightDiffuse[] = { 0.5f, 0.5f, 0.5f, 1.0f };
float fLightData[4] = {0.0f, 0.0f, 0.0f, 0.0f};
fLightData[0] = -15.0f;
fLightData[1] = -5.0f;
fLightData[2] = -10.0f;
fLightData[3] = 1.0f;
glLightfv(GL_LIGHT0+_AS->iActiveLights, GL_POSITION, fLightData);
glLightfv(GL_LIGHT0+_AS->iActiveLights, GL_AMBIENT , LightAmbient);
glLightfv(GL_LIGHT0+_AS->iActiveLights, GL_DIFFUSE, LightDiffuse);
glEnable(GL_LIGHT0+_AS->iActiveLights);
_AS->iActiveLights++;
// Draw the elements:
DrawGameMenuElements(pWindow);
// Draw the symbols:
glDisable(GL_BLEND);
glCullFace(GL_FRONT);
// Computer easy:
glPushMatrix();
glTranslatef(cP1ComputerEasy.vWorldPos.fX-3.0f,
cP1ComputerEasy.vWorldPos.fY+cP1ComputerEasy.vSize.fY*1.5f,
cP1ComputerEasy.vWorldPos.fZ);
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerEasy.vAniPos.fX/4, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerEasy.vAniPos.fY/4, 0.0f, 1.0f, 0.0f);
glRotatef(cP1ComputerEasy.vAniPos.fZ/4, 0.0f, 0.0f, 1.0f);
glScalef(0.065f, 0.065f, 0.065f);
glBindTexture(GL_TEXTURE_2D, GameTexture[7].iOpenGLID);
ASDrawMd2Frame(pComputerModel, 0);
// Draw the computer screen:
glBindTexture(GL_TEXTURE_2D, GameTexture[0].iOpenGLID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-19.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(14.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(14.0f, 11.0f, 18.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-19.0f, 11.0f, 18.0f);
glEnd();
glPopMatrix();
// Computer normal:
glPushMatrix();
glTranslatef(cP1ComputerNormal.vWorldPos.fX-3.0f,
cP1ComputerNormal.vWorldPos.fY+cP1ComputerNormal.vSize.fY*1.5f,
cP1ComputerNormal.vWorldPos.fZ);
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerNormal.vAniPos.fX/4, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerNormal.vAniPos.fY/4, 0.0f, 1.0f, 0.0f);
glRotatef(cP1ComputerNormal.vAniPos.fZ/4, 0.0f, 0.0f, 1.0f);
glScalef(0.065f, 0.065f, 0.065f);
glBindTexture(GL_TEXTURE_2D, GameTexture[7].iOpenGLID);
ASDrawMd2Frame(pComputerModel, 0);
// Draw the computer screen:
glBindTexture(GL_TEXTURE_2D, GameTexture[4].iOpenGLID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-19.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(14.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(14.0f, 11.0f, 18.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-19.0f, 11.0f, 18.0f);
glEnd();
glPopMatrix();
// Computer clever:
glPushMatrix();
glTranslatef(cP1ComputerClever.vWorldPos.fX-3.0f,
cP1ComputerClever.vWorldPos.fY+cP1ComputerClever.vSize.fY*1.5f,
cP1ComputerClever.vWorldPos.fZ);
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerClever.vAniPos.fX/4, 1.0f, 0.0f, 0.0f);
glRotatef(cP1ComputerClever.vAniPos.fY/4, 0.0f, 1.0f, 0.0f);
glRotatef(cP1ComputerClever.vAniPos.fZ/4, 0.0f, 0.0f, 1.0f);
glScalef(0.065f, 0.065f, 0.065f);
glBindTexture(GL_TEXTURE_2D, GameTexture[7].iOpenGLID);
ASDrawMd2Frame(pComputerModel, 0);
// Draw the computer screen:
glBindTexture(GL_TEXTURE_2D, GameTexture[8].iOpenGLID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-19.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(14.0f, 36.0f, 18.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(14.0f, 11.0f, 18.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-19.0f, 11.0f, 18.0f);
glEnd();
glPopMatrix();
glCullFace(GL_BACK);
_ASCamera->SetCameraTranslation(FALSE);
glEnable(GL_BLEND);
glColor4f(1.0f, 1.0f, 1.0f, 0.0f);
glBegin(GL_QUADS);
glVertex3f(-100.0f, 100.0f, 0.0f);
glVertex3f(100.0f, 100.0f, 0.0f);
glVertex3f(100.0f, -100.0f, 0.0f);
glVertex3f(-100.0f, -100.0f, 0.0f);
glEnd();
DrawMouseCursor(5.0f);
DisplaySmallMessage(pWindow);
ASSwapBuffers(*pWindow->GethDC(), pWindow, TRUE);
return 0;
} // end GameMenuDraw()
HRESULT GameMenuCheck(AS_WINDOW *pWindow)
{ // begin GameMenuCheck()
float fDelta;
_AS->ReadDXInput(*pWindow->GethWnd());
AnimateFont();
_ASCamera->SetCameraTranslation(FALSE);
UpdateMouseWorldPos(TRUE);
CheckSmallMessage();
CheckGameMenuElements();
// Animate the background:
if(g_lGameTimer-lGameMenuBackgroundAniTimer > 70 || g_lGameTimer-lGameMenuBackgroundAniTimer < 0)
{ // Go to the next animation step:
lGameMenuBackgroundAniTimer = g_lGameTimer;
iGameMenuBackgroundAniStep++;
if(iGameMenuBackgroundAniStep >= 32)
iGameMenuBackgroundAniStep = 0;
}
// Change the color of the background:
if((g_lGameTimer-lBackFlashTime) > lBackFlashTimeDelay || g_lGameTimer-lBackFlashTime < 0)
{
lBackFlashTime = g_lGameTimer;
lBackFlashTimeDelay = rand() % 500+300;
fLastBackFlash = fBackFlash;
fBackFlash = (float) (rand() % 50)/100.0f;
fBackFlashDelta = fBackFlash-fLastBackFlash;
}
fDelta = ((float) (g_lGameTimer-lBackFlashTime+1)/lBackFlashTimeDelay);
if(fDelta < 0.0f)
fDelta = -fDelta;
if(fBackFlash > fLastBackFlash)
fCurrentBackFlash = (float) fLastBackFlash+fBackFlashDelta*fDelta;
else
fCurrentBackFlash = (float) fLastBackFlash+fBackFlashDelta*fDelta;
// Keys:
if(ASKeyFirst[DIK_F1])
{ // Open the help file:
OpenHelp();
return 0;
}
if(ASKeyFirst[DIK_F2])
OpenAdvancedGameMenuDialog();
if(ASKeyFirst[DIK_F11])
MusicNext();
if(ASKeyFirst[DIK_F12])
{ // Open the configuration menu:
SendMessage(*_AS->pWindow[GAME_WINDOW_ID].GethWnd(), WM_COMMAND, ID_OPTIONS_CONFIG, 0);
InitGameMenuElementsLanguage();
}
if(ASKeyFirst[DIK_ESCAPE])
_AS->SetShutDown(TRUE);
// Other:
return 0;
} // end GameMenuCheck()
void EnumerateCardStyles(void)
{ // begin EnumerateCardStyles()
WIN32_FIND_DATA FindFileData;
char byTemp[256], byFilename[256], byStyleName[256];
HANDLE Find;
_AS->WriteLogMessage("Enumerate card styles");
if(pbyFoundCardStyle)
DestroyFoundCardStyles();
iFoundCardStyles = 0;
sprintf(byTemp, "%s%s\\*.*", _AS->byProgramPath, _AS->byCardStylesDirectory);
Find = FindFirstFile(byTemp, &FindFileData);
for(;;)
{
if(FindFileData.cFileName[0] != '.' && FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{ // We found a card style:
iFoundCardStyles++;
pbyFoundCardStyle = (char **) realloc(pbyFoundCardStyle, sizeof(char **)*iFoundCardStyles);
pbyFoundCardStyle[iFoundCardStyles-1] = new char[strlen(FindFileData.cFileName)+1];
strcpy(pbyFoundCardStyle[iFoundCardStyles-1], FindFileData.cFileName);
// Get the style name:
// Get the absolute path:
sprintf(byFilename, "%s%s\\%s\\info.txt", _AS->byProgramPath, _AS->byCardStylesDirectory, FindFileData.cFileName);
sprintf(byTemp, "general_%s", _ASConfig->byLanguage);
GetPrivateProfileString(byTemp, "name", "Noname", byStyleName, 256, byFilename);
pbyFoundCardStyleName = (char **) realloc(pbyFoundCardStyleName, sizeof(char **)*iFoundCardStyles);
pbyFoundCardStyleName[iFoundCardStyles-1] = new char[strlen(byStyleName)+1];
strcpy(pbyFoundCardStyleName[iFoundCardStyles-1], byStyleName);
}
if(!FindNextFile(Find, &FindFileData))
break;
}
} // end EnumerateCardStyles()
void DestroyFoundCardStyles(void)
{ // begin DestroyFoundCardStyles()
for(int i = 0; i < iFoundCardStyles; i++)
{
SAFE_DELETE(pbyFoundCardStyle[i]);
SAFE_DELETE(pbyFoundCardStyleName[i]);
}
SAFE_DELETE(pbyFoundCardStyle);
SAFE_DELETE(pbyFoundCardStyleName);
iFoundCardStyles = 0;
} // end DestroyFoundCardStyles()
void SetStandartMenuCamera(void)
{ // begin AS_CAMERA::SetStandartMenuCamera()
memset(_ASCamera, 0, sizeof(AS_CAMERA));
_ASCamera->fZoom = -55.0f;
_ASCamera->vPos.fY = -4.5f;
} // end AS_CAMERA::SetStandartMenuCamera()
void InitGameMenuElements(void)
{ // begin InitGameMenuElements()
int i, i2;
for(i = 0; i < MENU_BUTTONS; i++)
memset(cButtonList[i], 0, sizeof(cELEMENT));
// Setup player buttons:
for(i = 0; i < 4; i++)
for(i2 = 0; i2 < 4; i2++)
{
cPlayerButton[i][i2]->eType = CHECK_ELEMENT;
cPlayerButton[i][i2]->vSize = 1.0f;
cPlayerButton[i][i2]->bVisible = TRUE;
cPlayerButton[i][i2]->bActive = FALSE;
cPlayerButton[i][i2]->bChecked = FALSE;
cPlayerButton[i][i2]->bRound = TRUE;
}
for(i = 0; i < cGameConfig.iPlayers; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = TRUE;
cP1.eType = CHECK_ELEMENT;
cP1.vSize = 1.0f;
cP1.bVisible = TRUE;
cP1.bActive = TRUE;
cP1.pLeftMouseButton = P1Button;
cP2.eType = CHECK_ELEMENT;
cP2.vSize = 1.0f;
cP2.bVisible = TRUE;
cP2.bActive = TRUE;
cP2.pLeftMouseButton = P2Button;
cP3.eType = CHECK_ELEMENT;
cP3.vSize = 1.0f;
cP3.bVisible = TRUE;
cP3.bActive = TRUE;
cP3.pLeftMouseButton = P3Button;
cP4.eType = CHECK_ELEMENT;
cP4.vSize = 1.0f;
cP4.bVisible = TRUE;
cP4.bActive = TRUE;
cP4.pLeftMouseButton = P4Button;
cP1.bChecked = cP2.bChecked = cP3.bChecked = cP4.bChecked = FALSE;
cP1.bRound = cP2.bRound = cP3.bRound = cP4.bRound = TRUE;
switch(cGameConfig.iPlayers)
{
case 1: cP1.bChecked = TRUE; break;
case 2: cP2.bChecked = TRUE; break;
case 3: cP3.bChecked = TRUE; break;
case 4: cP4.bChecked = TRUE; break;
}
for(i = 0; i < 4; i++)
cPlayerButton[i][cGameConfig.PlayerType[i]]->bChecked = TRUE;
cP1.vWorldPos.fX = -6.0f;
cP1.vWorldPos.fY = -7.0f;
cP1Human.vWorldPos.fX = -6.0f;
cP1Human.vWorldPos.fY = -4.0f;
cP1Human.pLeftMouseButton = P1HumanButton;
cP1ComputerEasy.vWorldPos.fX = -6.0f;
cP1ComputerEasy.vWorldPos.fY = -1.0f;
cP1ComputerEasy.pLeftMouseButton = P1ComputerEasyButton;
cP1ComputerNormal.vWorldPos.fX = -6.0f;
cP1ComputerNormal.vWorldPos.fY = 2.0f;
cP1ComputerNormal.pLeftMouseButton = P1ComputerNormalButton;
cP1ComputerClever.vWorldPos.fX = -6.0f;
cP1ComputerClever.vWorldPos.fY = 5.0f;
cP1ComputerClever.pLeftMouseButton = P1ComputerCleverButton;
cP2.vWorldPos.fX = -2.5f;
cP2.vWorldPos.fY = -7.0f;
cP2Human.vWorldPos.fX = -2.5f;
cP2Human.vWorldPos.fY = -4.0f;
cP2Human.pLeftMouseButton = P2HumanButton;
cP2ComputerEasy.vWorldPos.fX = -2.5f;
cP2ComputerEasy.vWorldPos.fY = -1.0f;
cP2ComputerEasy.pLeftMouseButton = P2ComputerEasyButton;
cP2ComputerNormal.vWorldPos.fX = -2.5f;
cP2ComputerNormal.vWorldPos.fY = 2.0f;
cP2ComputerNormal.pLeftMouseButton = P2ComputerNormalButton;
cP2ComputerClever.vWorldPos.fX = -2.5f;
cP2ComputerClever.vWorldPos.fY = 5.0f;
cP2ComputerClever.pLeftMouseButton = P2ComputerCleverButton;
cP3.vWorldPos.fX = 1.0f;
cP3.vWorldPos.fY = -7.0f;
cP3Human.vWorldPos.fX = 1.0f;
cP3Human.vWorldPos.fY = -4.0f;
cP3Human.pLeftMouseButton = P3HumanButton;
cP3ComputerEasy.vWorldPos.fX = 1.0f;
cP3ComputerEasy.vWorldPos.fY = -1.0f;
cP3ComputerEasy.pLeftMouseButton = P3ComputerEasyButton;
cP3ComputerNormal.vWorldPos.fX = 1.0f;
cP3ComputerNormal.vWorldPos.fY = 2.0f;
cP3ComputerNormal.pLeftMouseButton = P3ComputerNormalButton;
cP3ComputerClever.vWorldPos.fX = 1.0f;
cP3ComputerClever.vWorldPos.fY = 5.0f;
cP3ComputerClever.pLeftMouseButton = P3ComputerCleverButton;
cP4.vWorldPos.fX = 4.5f;
cP4.vWorldPos.fY = -7.0f;
cP4Human.vWorldPos.fX = 4.5f;
cP4Human.vWorldPos.fY = -4.0f;
cP4Human.pLeftMouseButton = P4HumanButton;
cP4ComputerEasy.vWorldPos.fX = 4.5f;
cP4ComputerEasy.vWorldPos.fY = -1.0f;
cP4ComputerEasy.pLeftMouseButton = P4ComputerEasyButton;
cP4ComputerNormal.vWorldPos.fX = 4.5f;
cP4ComputerNormal.vWorldPos.fY = 2.0f;
cP4ComputerNormal.pLeftMouseButton = P4ComputerNormalButton;
cP4ComputerClever.vWorldPos.fX = 4.5f;
cP4ComputerClever.vWorldPos.fY = 5.0f;
cP4ComputerClever.pLeftMouseButton = P4ComputerCleverButton;
cCardPairsSlider.eType = SLIDER_ELEMENT;
cCardPairsSlider.pLeftMouseButton = CardPairsSlider;
cCardPairsSlider.vWorldPos.fX = -5.0f;
cCardPairsSlider.vWorldPos.fY = 15.0f;
cCardPairsSlider.vSize.fX = 14.0f;
cCardPairsSlider.vSize.fY = 0.8f;
cCardPairsSlider.vSize.fZ = 1.0f;
cCardPairsSlider.bVisible = TRUE;
cCardPairsSlider.bActive = TRUE;
cCardPairsSlider.iSliderMin = 1;
for(i = 0, i2 = 0; i < 11; i++)
{
cGameConfig.iCardPairs = iCardDimensionStencil[i][X]*iCardDimensionStencil[i][Y]/2;
if(cGameConfig.iCardPairs <= pcCardStyle->iCards)
i2++;
}
cCardPairsSlider.iSliderMax = i2-1;
cCardPairsSlider.iCurrentSliderPos = cGameConfig.iCardDimension;
cGameConfig.iCardPairs = iCardDimensionStencil[cGameConfig.iCardDimension][X]*iCardDimensionStencil[cGameConfig.iCardDimension][Y]/2;
cCardPairsText.eType = TEXT_ELEMENT;
cCardPairsText.vWorldPos.fX = 18.0f;
cCardPairsText.vWorldPos.fY = 15.0f;
cCardPairsText.vSize = 1.0f;
cCardPairsText.bVisible = TRUE;
cCardPairsText.bActive = TRUE;
strcpy(cCardPairsText.byText, T_CardPairs);
cCardStyleLast.eType = BUTTON_ELEMENT;
cCardStyleLast.pLeftMouseButton = CardStyleLast;
cCardStyleLast.vWorldPos.fX = -7.0f;
cCardStyleLast.vWorldPos.fY = 18.0f;
cCardStyleLast.vSize = 1.0f;
cCardStyleLast.bVisible = TRUE;
cCardStyleLast.bActive = TRUE;
cCardStyleNext.eType = BUTTON_ELEMENT;
cCardStyleNext.pLeftMouseButton = CardStyleNext;
cCardStyleNext.vWorldPos.fX = -5.0f;
cCardStyleNext.vWorldPos.fY = 18.0f;
cCardStyleNext.vSize = 1.0f;
cCardStyleNext.bVisible = TRUE;
cCardStyleNext.bActive = TRUE;
cCardStyleText.eType = TEXT_ELEMENT;
cCardStyleText.vWorldPos.fX = 9.0f;
cCardStyleText.vWorldPos.fY = 18.0f;
cCardStyleText.vSize = 1.0f;
cCardStyleText.bVisible = TRUE;
cCardStyleText.bActive = TRUE;
sprintf(cCardStyleText.byText, "%s: %s", T_CardStyle, pcCardStyle->byFolderName);
// Think time limit:
cThinkTime.eType = CHECK_ELEMENT;
cThinkTime.pLeftMouseButton = ThinkTimeButton;
cThinkTime.vWorldPos.fX = -15.0f;
cThinkTime.vWorldPos.fY = 10.0f;
cThinkTime.vSize = 1.0f;
cThinkTime.bVisible = TRUE;
cThinkTime.bActive = TRUE;
cThinkTime.bChecked = cGameConfig.bThinkTimeLimit;
cThinkTimeSlider.eType = SLIDER_ELEMENT;
cThinkTimeSlider.pLeftMouseButton = ThinkTimeSlider;
cThinkTimeSlider.vWorldPos.fX = 12.0f;
cThinkTimeSlider.vWorldPos.fY = 10.0f;
cThinkTimeSlider.vSize.fX = 10.0f;
cThinkTimeSlider.vSize.fY = 0.8f;
cThinkTimeSlider.vSize.fZ = 1.0f;
cThinkTimeSlider.bVisible = TRUE;
cThinkTimeSlider.bActive = cThinkTime.bChecked;
cThinkTimeSlider.iSliderMin = 2;
cThinkTimeSlider.iSliderMax = 30;
cThinkTimeSlider.iCurrentSliderPos = cGameConfig.iThinkTime;
// Other
cStart.eType = BUTTON_ELEMENT;
cStart.pLeftMouseButton = StartButton;
cStart.vWorldPos.fX = -14.0f;
cStart.vWorldPos.fY = 25.0f;
cStart.vSize.fX = 8.0f;
cStart.vSize.fY = 0.8f;
cStart.vSize.fZ = 1.0f;
cStart.bVisible = TRUE;
cStart.bActive = TRUE;
cAdvancedOptions.eType = BUTTON_ELEMENT;
cAdvancedOptions.pLeftMouseButton = AdvancedOptionsButton;
cAdvancedOptions.vWorldPos.fX = 0.0f;
cAdvancedOptions.vWorldPos.fY = 23.0f;
cAdvancedOptions.vSize.fX = 15.0f;
cAdvancedOptions.vSize.fY = 0.8f;
cAdvancedOptions.vSize.fZ = 1.0f;
cAdvancedOptions.bVisible = TRUE;
cAdvancedOptions.bActive = TRUE;
cQuit.eType = BUTTON_ELEMENT;
cQuit.pLeftMouseButton = QuitButton;
cQuit.vWorldPos.fX = 18.0f;
cQuit.vWorldPos.fY = 25.0f;
cQuit.vSize.fX = 8.0f;
cQuit.vSize.fY = 0.8f;
cQuit.vSize.fZ = 1.0f;
cQuit.bVisible = TRUE;
cQuit.bActive = TRUE;
InitGameMenuElementsLanguage();
} // end InitGameMenuElements()
void InitGameMenuElementsLanguage(void)
{ // begin InitGameMenuElementsLanguage()
strcpy(cP1.byText, "1");
strcpy(cP2.byText, "2");
strcpy(cP3.byText, "3");
strcpy(cP4.byText, "4");
strcpy(cP4Human.byText, T_Human);
strcpy(cP4ComputerEasy.byText, T_ComputerEasy);
strcpy(cP4ComputerNormal.byText, T_ComputerNormal);
strcpy(cP4ComputerClever.byText, T_ComputerClever);
sprintf(cCardPairsSlider.byText, "%d", cGameConfig.iCardPairs);
strcpy(cCardStyleLast.byText, "<");
strcpy(cCardStyleNext.byText, ">");
strcpy(cCardPairsText.byText, T_CardPairs);
sprintf(cCardStyleText.byText, "%s: %s", T_CardStyle, pcCardStyle->byFolderName);
strcpy(cThinkTime.byText, T_ThinkTimeLimit);
sprintf(cThinkTimeSlider.byText, "%d %s", cGameConfig.iThinkTime, T_Seconds);
strcpy(cStart.byText, T_StartGame);
strcpy( cAdvancedOptions.byText, T_AdvancedOptions);
strcpy(cQuit.byText, T_Quit);
} // end InitGameMenuElementsLanguage()
void DrawGameMenuElements(AS_WINDOW *pWindow)
{ // begin DrawGameMenuElements()
int i;
for(i = 0; i < MENU_BUTTONS; i++)
cButtonList[i]->Draw();
for(i = 0; i < MENU_BUTTONS; i++)
cButtonList[i]->DrawText(pWindow);
} // end DrawGameMenuElements()
void CheckGameMenuElements(void)
{ // begin CheckGameMenuElements()
for(int i = 0; i < MENU_BUTTONS; i++)
cButtonList[i]->Check();
} // end CheckGameMenuElements()
void P1Button(void)
{ // begin P1Button()
int i, i2;
cGameConfig.iPlayers = 1;
cP2.bChecked = cP3.bChecked = cP4.bChecked = FALSE;
for(i = 0; i < 4; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = FALSE;
for(i = 0; i < cGameConfig.iPlayers; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = TRUE;
} // end P1Button()
void P2Button(void)
{ // begin P2Button()
int i, i2;
cGameConfig.iPlayers = 2;
cP1.bChecked = cP3.bChecked = cP4.bChecked = FALSE;
for(i = 0; i < 4; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = FALSE;
for(i = 0; i < cGameConfig.iPlayers; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = TRUE;
} // end P2Button()
void P3Button(void)
{ // begin P3Button()
int i, i2;
cGameConfig.iPlayers = 3;
cP1.bChecked = cP2.bChecked = cP4.bChecked = FALSE;
for(i = 0; i < 4; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = FALSE;
for(i = 0; i < cGameConfig.iPlayers; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = TRUE;
} // end P3Button()
void P4Button(void)
{ // begin P4Button()
int i, i2;
cGameConfig.iPlayers = 4;
cP1.bChecked = cP2.bChecked = cP3.bChecked = FALSE;
for(i = 0; i < 4; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = FALSE;
for(i = 0; i < cGameConfig.iPlayers; i++)
for(i2 = 0; i2 < 4; i2++)
cPlayerButton[i][i2]->bActive = TRUE;
} // end P4Button()
void P1HumanButton(void)
{ // begin P1HumanButton()
cGameConfig.PlayerType[0] = PLAYER_TYPE_HUMAN;
cP1ComputerEasy.bChecked = cP1ComputerNormal.bChecked = cP1ComputerClever.bChecked = FALSE;
} // end P1HumanButton()
void P1ComputerEasyButton(void)
{ // begin P1ComputerEasyButton()
cGameConfig.PlayerType[0] = PLAYER_TYPE_COMPUTER_EASY;
cP1Human.bChecked = cP1ComputerNormal.bChecked = cP1ComputerClever.bChecked = FALSE;
} // end P1ComputerEasyButton()
void P1ComputerNormalButton(void)
{ // begin P1ComputerNormalButton()
cGameConfig.PlayerType[0] = PLAYER_TYPE_COMPUTER_NORMAL;
cP1Human.bChecked = cP1ComputerEasy.bChecked = cP1ComputerClever.bChecked = FALSE;
} // end P1ComputerNormalButton()
void P1ComputerCleverButton(void)
{ // begin P1ComputerCleverButton()
cP1Human.bChecked = cP1ComputerEasy.bChecked = cP1ComputerNormal.bChecked = FALSE;
cGameConfig.PlayerType[0] = PLAYER_TYPE_COMPUTER_CLEVER;
} // end P1ComputerCleverButton()
void P2HumanButton(void)
{ // begin P2HumanButton()
cGameConfig.PlayerType[1] = PLAYER_TYPE_HUMAN;
cP2ComputerEasy.bChecked = cP2ComputerNormal.bChecked = cP2ComputerClever.bChecked = FALSE;
} // end P2HumanButton()
void P2ComputerEasyButton(void)
{ // begin P2ComputerEasyButton()
cGameConfig.PlayerType[1] = PLAYER_TYPE_COMPUTER_EASY;
cP2Human.bChecked = cP2ComputerNormal.bChecked = cP2ComputerClever.bChecked = FALSE;
} // end P2ComputerEasyButton()
void P2ComputerNormalButton(void)
{ // begin P2ComputerNormalButton()
cGameConfig.PlayerType[1] = PLAYER_TYPE_COMPUTER_NORMAL;
cP2Human.bChecked = cP2ComputerEasy.bChecked = cP2ComputerClever.bChecked = FALSE;
} // end P2ComputerNormalButton()
void P2ComputerCleverButton(void)
{ // begin P2ComputerCleverButton()
cGameConfig.PlayerType[1] = PLAYER_TYPE_COMPUTER_CLEVER;
cP2Human.bChecked = cP2ComputerEasy.bChecked = cP2ComputerNormal.bChecked = FALSE;
} // end P2ComputerCleverButton()
void P3HumanButton(void)
{ // begin P3HumanButton()
cGameConfig.PlayerType[2] = PLAYER_TYPE_HUMAN;
cP3ComputerEasy.bChecked = cP3ComputerNormal.bChecked = cP3ComputerClever.bChecked = FALSE;
} // end P3HumanButton()
void P3ComputerEasyButton(void)
{ // begin P3ComputerEasyButton()
cGameConfig.PlayerType[2] = PLAYER_TYPE_COMPUTER_EASY;
cP3Human.bChecked = cP3ComputerNormal.bChecked = cP3ComputerClever.bChecked = FALSE;
} // end P3ComputerEasyButton()
void P3ComputerNormalButton(void)
{ // begin P3ComputerNormalButton()
cGameConfig.PlayerType[2] = PLAYER_TYPE_COMPUTER_NORMAL;
cP3Human.bChecked = cP3ComputerEasy.bChecked = cP3ComputerClever.bChecked = FALSE;
} // end P3ComputerNormalButton()
void P3ComputerCleverButton(void)
{ // begin P3ComputerCleverButton()
cGameConfig.PlayerType[2] = PLAYER_TYPE_COMPUTER_CLEVER;
cP3Human.bChecked = cP3ComputerEasy.bChecked = cP3ComputerNormal.bChecked = FALSE;
} // end P3ComputerCleverButton()
void P4HumanButton(void)
{ // begin P4HumanButton()
cGameConfig.PlayerType[3] = PLAYER_TYPE_HUMAN;
cP4ComputerEasy.bChecked = cP4ComputerNormal.bChecked = cP4ComputerClever.bChecked = FALSE;
} // end P4HumanButton()
void P4ComputerEasyButton(void)
{ // begin P4ComputerEasyButton()
cGameConfig.PlayerType[3] = PLAYER_TYPE_COMPUTER_EASY;
cP4Human.bChecked = cP4ComputerNormal.bChecked = cP4ComputerClever.bChecked = FALSE;
} // end P4ComputerEasyButton()
void P4ComputerNormalButton(void)
{ // begin P4ComputerNormalButton()
cGameConfig.PlayerType[3] = PLAYER_TYPE_COMPUTER_NORMAL;
cP4Human.bChecked = cP4ComputerEasy.bChecked = cP4ComputerClever.bChecked = FALSE;
} // end P4ComputerNormalButton()
void P4ComputerCleverButton(void)
{ // begin P4ComputerCleverButton()
cGameConfig.PlayerType[3] = PLAYER_TYPE_COMPUTER_CLEVER;
cP4Human.bChecked = cP4ComputerEasy.bChecked = cP4ComputerNormal.bChecked = FALSE;
} // end P4ComputerCleverButton()
void CardPairsSlider(void)
{ // begin CardPairsSlider()
cGameConfig.iCardDimension = cCardPairsSlider.iCurrentSliderPos;
cGameConfig.iCardPairs = iCardDimensionStencil[cGameConfig.iCardDimension][X]*iCardDimensionStencil[cGameConfig.iCardDimension][Y]/2;
sprintf(cCardPairsSlider.byText, "%d", cGameConfig.iCardPairs);
} // end CardPairsSlider()
void CardStyleLast(void)
{ // begin CardStyleLast()
int i;
// Find the current music index:
for(i = 0; i < iFoundCardStyles; i++)
{
if(!strcmp(pbyFoundCardStyle[i], pcCardStyle->byFolderName))
break;
}
// Choose the last card card style:
i--;
if(i < 0)
i = iFoundCardStyles-1;
// Load the selected card style:
LoadNewCardStyle(i);
} // end CardStyleLast()
void CardStyleNext(void)
{ // begin CardStyleNext()
int i;
// Find the current music index:
for(i = 0; i < iFoundCardStyles; i++)
{
if(!strcmp(pbyFoundCardStyle[i], pcCardStyle->byFolderName))
break;
}
// Choose the last card card style:
i++;
if(i > iFoundCardStyles-1)
i = 0;
// Load the selected card style:
LoadNewCardStyle(i);
} // end CardStyleNext()
void LoadNewCardStyle(int i)
{ // begin LoadNewCardStyle()
if(!pbyFoundCardStyle)
return;
// Load the selected card script:
pcCardStyle->Load(pbyFoundCardStyle[i]);
// Check if the number of card pairs is corrent:
for(;;)
{
cGameConfig.iCardPairs = iCardDimensionStencil[cGameConfig.iCardDimension][X]*iCardDimensionStencil[cGameConfig.iCardDimension][Y]/2;
if(cGameConfig.iCardPairs > pcCardStyle->iCards)
{
cGameConfig.iCardDimension--;
if(cGameConfig.iCardDimension <= 0)
{
cGameConfig.iCardDimension = 0;
cGameConfig.iCardPairs = iCardDimensionStencil[cGameConfig.iCardDimension][X]*iCardDimensionStencil[cGameConfig.iCardDimension][Y]/2;
break;
}
}
else
break;
}
InitGameMenuElements();
} // end LoadNewCardStyle()
void ThinkTimeButton(void)
{ // begin ThinkTimeButton()
cGameConfig.bThinkTimeLimit = cThinkTime.bChecked;
cThinkTimeSlider.bActive = cThinkTime.bChecked;
} // end ThinkTimeButton()
void ThinkTimeSlider(void)
{ // begin ThinkTimeSlider()
cGameConfig.iThinkTime = cThinkTimeSlider.iCurrentSliderPos;
sprintf(cThinkTimeSlider.byText, "%d %s", cGameConfig.iThinkTime, T_Seconds);
} // end ThinkTimeSlider()
void StartButton(void)
{ // begin StartButton()
_AS->SetNextModule(MODULE_GAME);
} // end StartButton()
void AdvancedOptionsButton(void)
{ // begin AdvancedOptionsButton()
OpenAdvancedGameMenuDialog();
} // end AdvancedOptionsButton()
void QuitButton(void)
{ // begin QuitButton()
_AS->SetShutDown(TRUE);
} // end QuitButton()
void MusicNext(void)
{ // begin MusicNext()
int i;
// Find the current music index:
for(i = 0; i < iFoundMusic; i++)
{
if(!strcmp(pbyFoundMusic[i], byCurrentMusic))
break;
}
// Choose the next music:
i++;
if(i > iFoundMusic-1)
i = 0;
StartMusic(pbyFoundMusic[i]);
} // end MusicNext()