heck yeah that works Hodgey,
I was looking at that loop but its kind of drowning me .. I have been teaching myself C++ since June 15th of this year so *everything* seems hard to me right now. Your analysis was more lucid than mine might have been thank you for taking the time to review it.
Now that menuing works I will start breaking some of these functions into separate files to keep the main program clean but this 'all in one' file helps understand how a menuing system *could work* case 5 is the quit game scenario and at least works well on Windows workstations.
My currently working code
// Includes, namespace and prototypes
#include "template.h"
using namespace AGK;
app App;
// Begin app, called once at the start
void MainMenu( void); //ansi prototype
void PlayMenu( void ); //ansi prototype
void SettingsMenu(void); //ansi prototype
void CleanUpImages(void); // ansi prototype
int iSprite=0;
int retard_count=0;
int CaseDetection( int );//ansi prototype
int _caseDefinition=1;
int MainMenuExitFlag=0;
int PlayMenuExitFlag=1;
int SettingsMenuExitFlag=1;
int HelpMenuExitFlag=1;
int Current_Case=0;
int Previous_Case=0;
void app::Begin( void )
{
agk::SetVirtualResolution ( 1024, 768 );
MainMenu(); // setting main menu up on first launch
}
// Main loop, called every frame
void app::Loop ( void )
{
// CaseDetection this detects which menu button was clicked on by sprite # , depending which button a case is selected
// depending on the case I activate one menu, and deactivate others by setting flags to 1 or 0
switch(CaseDetection(_caseDefinition))
{
case 1:
// this is a dummy or 'default' case for if the user clicks on a sprite below 9000
// This way the menu flags won't change except when clicking on
// I was not sure if I had to have it do anything or not so it just counts up the retard_count in case
retard_count++;break;
case 2:
CleanUpImages();
PlayMenu();
PlayMenuExitFlag=0;
MainMenuExitFlag=1;
SettingsMenuExitFlag=1;
break;
case 3:
CleanUpImages();
SettingsMenu();
SettingsMenuExitFlag=0;
MainMenuExitFlag=1;
PlayMenuExitFlag=1;
break;
case 4:
CleanUpImages();
MainMenu();
MainMenuExitFlag=0;
PlayMenuExitFlag=1;
SettingsMenuExitFlag=1;
break;
case 5:
CleanUpImages();
PostQuitMessage(0);
break;
}
if (PlayMenuExitFlag==0)
{
// do stuff here when the Play Menu is active
// ********************************************
// on screen debug and performance information
//agk::Print ( "Clicked on sprite" );
//agk::Print ( iSprite );
agk::Print (agk::ScreenFPS());
// ********************************************
}
if (MainMenuExitFlag==0)
{
// do stuff here when the Main Menu is active
// ********************************************
// on screen debug and performance information
agk::Print ( "Clicked on sprite" );
agk::Print ( iSprite );
agk::Print (agk::ScreenFPS());
// ********************************************
}
agk::Sync();
}
void MainMenu( void)
{
// setting up images for main menu
agk::LoadImage ( 1, "mainmenu.png" );
if(agk::GetSpriteExists(1) == 0) agk::CreateSprite(1,1);
agk::SetSpriteSize ( 1, 1024, 768 );
agk::LoadImage ( 2, "mainmenupost.png" );
if(agk::GetSpriteExists(2) == 0) agk::CreateSprite(2,2);
agk::SetSpritePosition( 2,110,510);
agk::LoadImage ( 9000, "mainnew1.png" ); // NEW image to create a new game and send you to the PlayMenu
if(agk::GetSpriteExists(9000) == 0) agk::CreateSprite(9000,9000);
agk::SetSpritePosition( 9000,50,535);
agk::LoadImage ( 9001, "mainquit1.png" ); // QUIT image from main menu should end the game.
if(agk::GetSpriteExists(9001) == 0) agk::CreateSprite(9001,9001);
agk::SetSpritePosition( 9001,50,610);
agk::LoadImage ( 9002, "mainhighscores.png");
if(agk::GetSpriteExists(9002) == 0) agk::CreateSprite(9002,9002);
agk::SetSpritePosition( 9002,50,680);
agk::LoadImage ( 9003, "mainsettings.png" );
if(agk::GetSpriteExists(9003) == 0) agk::CreateSprite(9003,9003);
agk::SetSpritePosition( 9003,300,670);
return;
}
void PlayMenu( void )
{
agk::LoadImage ( 500, "playgrid1024.png" );
if(agk::GetSpriteExists(500) == 0) agk::CreateSprite(500,500);
agk::SetSpriteSize ( 500, 1024, 768 );
agk::LoadImage ( 501, "scoredrop01.png" );
if(agk::GetSpriteExists(501) == 0) agk::CreateSprite(501,501);
agk::SetSpritePosition( 501,700,100);
agk::LoadImage ( 9004, "playmenu1.png" );
if(agk::GetSpriteExists(9004) == 0) agk::CreateSprite(9004,9004);
agk::SetSpritePosition( 9004,700,225);
agk::LoadImage ( 9005, "playquit1.png" );
if(agk::GetSpriteExists(9005) == 0) agk::CreateSprite(9005,9005);
agk::SetSpritePosition( 9005,700,280);
agk::LoadImage ( 9006, "playhelp1.png" );
if(agk::GetSpriteExists(9006) == 0) agk::CreateSprite(9006,9006);
agk::SetSpritePosition( 9006,700,335);
// agk::LoadImage ( 501, "HINT.png" );
// if(agk::GetSpriteExists(501) == 0) agk::CreateSprite(501,501);
// agk::SetSpritePosition( 501,700,300);
}
void SettingsMenu()
{
agk::LoadImage ( 600, "settings1024.jpg" );
if(agk::GetSpriteExists(600) == 0) agk::CreateSprite(600,600);
agk::SetSpriteSize ( 600, 1024, 768 );
agk::LoadImage ( 9007, "settBack.png" );
if(agk::GetSpriteExists(9007) == 0) agk::CreateSprite(9007,9007);
agk::SetSpritePosition( 9007,700,200);
}
void CleanUpImages(void)
{
// cleaning up main menu sprites
if(agk::GetSpriteExists(1) ==1) agk::DeleteSprite(1);
if(agk::GetSpriteExists(2) ==1) agk::DeleteSprite(2);
if(agk::GetSpriteExists(9000) ==1) agk::DeleteSprite(9000);
if(agk::GetSpriteExists(9001) ==1) agk::DeleteSprite(9001);
if(agk::GetSpriteExists(9002) ==1) agk::DeleteSprite(9002);
if(agk::GetSpriteExists(9003) ==1) agk::DeleteSprite(9003);
// delete playmenu graphics
if(agk::GetSpriteExists(500) ==1) agk::DeleteSprite(500);
if(agk::GetSpriteExists(501) ==1) agk::DeleteSprite(501);
if(agk::GetSpriteExists(9004) ==1) agk::DeleteSprite(9004);
if(agk::GetSpriteExists(9005) ==1) agk::DeleteSprite(9005);
if(agk::GetSpriteExists(9006) ==1) agk::DeleteSprite(9006);
// delete settings menu graphics
if(agk::GetSpriteExists(600) ==1) agk::DeleteSprite(600);
if(agk::GetSpriteExists(9007) ==1) agk::DeleteSprite(9007);
}
int CaseDetection( int _caseDefinition )
{
if ( agk::GetPointerPressed ( ) )
iSprite = agk::GetSpriteHit ( agk::GetPointerX ( ), agk::GetPointerY ( ) );
// Main Menu Buttons
if (iSprite == 9000) _caseDefinition=2; // Play a game
if (iSprite == 9001) _caseDefinition=5; // Quit a game
if (iSprite == 9003) _caseDefinition=3; // settings menu
if (iSprite == 9005)_caseDefinition=4; // Main Menu
if (iSprite == 9007)_caseDefinition=4; // Main Menu
if (iSprite < 9000)_caseDefinition=1; // retard count
return _caseDefinition;
}
// Called when the app ends
void app::End ( void )
{
}