diff --git a/data/translations/text.dat b/data/translations/text.dat index c1f8c2501..004598eb6 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -46,10 +46,32 @@ eng=PRESS START eng=START GAME [STR__FRONTEND__OPTIONS] eng=OPTIONS +[STR__FRONTEND__CREDITS] +eng=CREDITS +; Options menu +[STR__FRONTEND__CONTROLS] +eng=CONTROLS +[STR__FRONTEND__SCREEN] +eng=SCREEN +[STR__FRONTEND__SOUND] +eng=SOUND [STR__FRONTEND__EXIT] eng=EXIT +[STR__FRONTEND__BACK] +eng=BACK +; Controls menu + +; Screen menu + +; Sound menu +[STR__FRONTEND__BGM] +eng=BGM VOLUME +[STR__FRONTEND__SFX] +eng=SFX VOLUME +[STR__FRONTEND__SPEECH] +eng=SPEECH VOLUME ; --------------------------------------------------------------- diff --git a/makefile.gaz b/makefile.gaz index b9e98b184..71dd635ac 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -75,6 +75,7 @@ gfx_src := prim \ gui_src := gui \ gbutton \ + gfactory \ gframe \ greadout \ gtextbox diff --git a/source/frontend/maintitl.cpp b/source/frontend/maintitl.cpp index 480dac118..478fd0ae1 100644 --- a/source/frontend/maintitl.cpp +++ b/source/frontend/maintitl.cpp @@ -18,10 +18,6 @@ #include "frontend\maintitl.h" -#ifndef __MEMORY_HEADER__ -#include "mem\memory.h" -#endif - #ifndef __GFX_SPRBANK_H__ #include "gfx\sprbank.h" #endif @@ -46,22 +42,14 @@ #include "gfx\fader.h" #endif -#ifndef __GUI_GUI_H__ -#include "gui\gui.h" -#endif - -#ifndef __GUI_GTEXTBOX_H__ -#include "gui\gtextbox.h" +#ifndef __GUI_GFACTORY_H__ +#include "gui\gfactory.h" #endif #ifndef __GUI_GFRAME_H__ #include "gui\gframe.h" #endif -#ifndef __GUI_GBUTTON_H__ -#include "gui\gbutton.h" -#endif - /* Std Lib ------- */ @@ -111,15 +99,8 @@ int sval=0; Params: Returns: ---------------------------------------------------------------------- */ -int mem; void CFrontEndMainTitles::init() { -mem=MainRam.TotalRam-MainRam.RamUsed; -PAUL_DBGMSG("initial mem free=%d",mem); - CGUIGroupFrame *fr; - CGUITextBox *tb; - CGUIToggleButton *tg; - m_sprites=new ("MainTitle Sprites") SpriteBank(); m_sprites->load(FRONTEND_FRONTEND_SPR); @@ -127,36 +108,26 @@ PAUL_DBGMSG("initial mem free=%d",mem); m_smallFont->initialise(&standardFont); m_smallFont->setJustification(FontBank::JUST_CENTRE); - // Create the main menu ( START GAME/OPTIONS ) + // Create the main menu ( START GAME/OPTIONS/CREDITS ) m_mainMenu=new ("Main Menu GUI") CGUIControlFrame(); m_mainMenu->init(NULL); - m_mainMenu->setObjectXYWH(106,140,300,40); + m_mainMenu->setObjectXYWH(106,140,300,60); m_mainMenu->clearFlags(CGUIObject::FLAG_DRAWBORDER); - fr=new ("frame") CGUIGroupFrame(); - fr->init(m_mainMenu); - fr->setObjectXYWH(50,0,200,20); - tb=new ("textbox") CGUITextBox(); - tb->init(fr); - tb->setObjectXYWH(0,0,200,20); - tb->setText(STR__FRONTEND__START_GAME); - tg=new ("togglebutton") CGUIToggleButton(); - tg->init(fr); - tg->setButtonTarget(&m_startGameFlag); - - fr=new ("frame") CGUIGroupFrame(); - fr->init(m_mainMenu); - fr->setObjectXYWH(50,20,200,20); - tb=new ("textbox") CGUITextBox(); - tb->init(fr); - tb->setObjectXYWH(0,0,200,20); - tb->setText(STR__FRONTEND__OPTIONS); - tg=new ("togglebutton") CGUIToggleButton(); - tg->init(fr); - tg->setButtonTarget(&m_gotoOptionsFlag); + CGUIFactory::createValueButtonFrame(m_mainMenu, + 50,0,200,20, + STR__FRONTEND__START_GAME, + &m_startGameFlag,true); + CGUIFactory::createValueButtonFrame(m_mainMenu, + 50,20,200,20, + STR__FRONTEND__OPTIONS, + &m_gotoOptionsFlag,true); + CGUIFactory::createValueButtonFrame(m_mainMenu, + 50,40,200,20, + STR__FRONTEND__CREDITS, + &m_gotoOptionsFlag,true); } - /*---------------------------------------------------------------------- Function: Purpose: @@ -168,7 +139,6 @@ void CFrontEndMainTitles::shutdown() m_mainMenu->shutdown(); // GUI items delete themselves when shutdown.. m_smallFont->dump(); delete m_smallFont; m_sprites->dump(); delete m_sprites; -PAUL_DBGMSG("change=%d",mem-(MainRam.TotalRam-MainRam.RamUsed)); } /*---------------------------------------------------------------------- diff --git a/source/frontend/options.cpp b/source/frontend/options.cpp index ee1596b95..153115f0f 100644 --- a/source/frontend/options.cpp +++ b/source/frontend/options.cpp @@ -34,26 +34,22 @@ #include "gfx\prim.h" #endif -#ifndef __GUI_GUI_H__ -#include "gui\gui.h" -#endif - -#ifndef __GUI_GTEXTBOX_H__ -#include "gui\gtextbox.h" +#ifndef __GUI_GFACTORY_H__ +#include "gui\gfactory.h" #endif #ifndef __GUI_GFRAME_H__ #include "gui\gframe.h" #endif -#ifndef __GUI_GBUTTON_H__ -#include "gui\gbutton.h" -#endif - #ifndef __LOCALE_TEXTDBASE_H__ #include "locale\textdbase.h" #endif +#ifndef __SOUND_SOUND_H__ +#include "sound\sound.h" +#endif + /* Std Lib ------- */ @@ -90,27 +86,72 @@ ---------------------------------------------------------------------- */ void CFrontEndOptions::init() { - CGUIGroupFrame *fr; - CGUITextBox *tb; - CGUIToggleButton *tg; + int i; m_background=new ("Options Background") CScrollyBackground(); m_background->init(); - m_optionsMenu=new ("Options GUI") CGUIControlFrame(); - m_optionsMenu->init(NULL); - m_optionsMenu->setObjectXYWH(50,40,412,176); + // Create the menu frames + for(i=0;iinit(NULL); + (*mm)->setObjectXYWH(50,40,412,176); + } - fr=new ("frame") CGUIGroupFrame(); - fr->init(m_optionsMenu); - fr->setObjectXYWH(50,0,200,20); - tb=new ("textbox") CGUITextBox(); - tb->init(fr); - tb->setObjectXYWH(0,0,200,20); - tb->setText(STR__FRONTEND__EXIT); - tg=new ("togglebutton") CGUIToggleButton(); - tg->init(fr); - tg->setButtonTarget(&m_exitFlag); + + // Populate OPTIONS menu + CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], + X_BORDER,Y_BORDER,412-(X_BORDER*2),20, + STR__FRONTEND__CONTROLS, + &m_nextMode,MODE__CONTROL); + CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], + X_BORDER,Y_BORDER+30,412-(X_BORDER*2),20, + STR__FRONTEND__SCREEN, + &m_nextMode,MODE__SCREEN); + CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], + X_BORDER,Y_BORDER+60,412-(X_BORDER*2),20, + STR__FRONTEND__SOUND, + &m_nextMode,MODE__SOUND); + CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS], + X_BORDER,176-Y_BORDER-20,412-(X_BORDER*2),20, + STR__FRONTEND__EXIT, + &m_exitFlag,true); + + + // Populate CONTROLS menu + + + // Populate SCREEN menu + + + // Populate SOUND menu + CGUIFactory::createSliderButtonFrame(m_modeMenus[MODE__SOUND], + X_BORDER,Y_BORDER,412-(X_BORDER*2),30, + STR__FRONTEND__BGM, + &m_bgmVolume,CSoundMediator::MIN_VOLUME,CSoundMediator::MAX_VOLUME); + CGUIFactory::createSliderButtonFrame(m_modeMenus[MODE__SOUND], + X_BORDER,Y_BORDER+40,412-(X_BORDER*2),30, + STR__FRONTEND__SFX, + &m_sfxVolume,CSoundMediator::MIN_VOLUME,CSoundMediator::MAX_VOLUME); + CGUIFactory::createSliderButtonFrame(m_modeMenus[MODE__SOUND], + X_BORDER,Y_BORDER+80,412-(X_BORDER*2),30, + STR__FRONTEND__SPEECH, + &m_speechVolume,CSoundMediator::MIN_VOLUME,CSoundMediator::MAX_VOLUME); + + // Add BACK to all of the sub menus + for(i=1;ishutdown(); + int i; + + for(i=0;ishutdown(); + } m_background->shutdown(); delete m_background; } @@ -133,7 +180,9 @@ void CFrontEndOptions::shutdown() ---------------------------------------------------------------------- */ void CFrontEndOptions::select() { - m_optionsMenu->select(); + m_modeMenus[MODE__OPTIONS]->select(); + + m_mode=m_nextMode=MODE__OPTIONS; m_exitFlag=false; m_closingDown=false; @@ -149,7 +198,7 @@ void CFrontEndOptions::select() ---------------------------------------------------------------------- */ void CFrontEndOptions::unselect() { - m_optionsMenu->unselect(); + m_modeMenus[m_mode]->unselect(); } /*---------------------------------------------------------------------- @@ -172,7 +221,7 @@ void CFrontEndOptions::render() m_background->render(); - m_optionsMenu->render(); + m_modeMenus[m_mode]->render(); } /*---------------------------------------------------------------------- @@ -192,7 +241,32 @@ void CFrontEndOptions::think(int _frames) if(!CFader::isFading()) { - m_optionsMenu->think(_frames); + if(m_nextMode!=m_mode) + { + m_modeMenus[m_mode]->unselect(); + m_mode=m_nextMode; + m_modeMenus[m_mode]->select(); + } + m_modeMenus[m_mode]->think(_frames); + + if(m_mode==MODE__SOUND) + { + if(m_bgmVolume!=CSoundMediator::getVolume(CSoundMediator::SONG)) + { + CSoundMediator::setVolume(CSoundMediator::SONG,m_bgmVolume); + PAUL_DBGMSG("SONG"); + } + if(m_sfxVolume!=CSoundMediator::getVolume(CSoundMediator::SFX)) + { + CSoundMediator::setVolume(CSoundMediator::SFX,m_sfxVolume); + PAUL_DBGMSG("SFX"); + } + if(m_speechVolume!=CSoundMediator::getVolume(CSoundMediator::SPEECH)) + { + CSoundMediator::setVolume(CSoundMediator::SPEECH,m_speechVolume); + PAUL_DBGMSG("SPEECH"); + } + } } if(!m_closingDown&&m_exitFlag) @@ -200,6 +274,7 @@ void CFrontEndOptions::think(int _frames) CFader::setFadingOut(); m_closingDown=true; } + } /*---------------------------------------------------------------------- diff --git a/source/frontend/options.h b/source/frontend/options.h index 83ee2c990..763661e56 100644 --- a/source/frontend/options.h +++ b/source/frontend/options.h @@ -49,13 +49,33 @@ public: private: + enum + { + MODE__OPTIONS, + MODE__CONTROL, + MODE__SCREEN, + MODE__SOUND, + + MODE__COUNT, + }; + + enum + { + X_BORDER=30, + Y_BORDER=20, + }; + class CScrollyBackground *m_background; - class CGUIControlFrame *m_optionsMenu; - + class CGUIControlFrame *m_modeMenus[MODE__COUNT]; + int m_mode,m_nextMode; + int m_exitFlag; - int m_closingDown; + int m_bgmVolume; + int m_sfxVolume; + int m_speechVolume; + }; diff --git a/source/gui/gbutton.cpp b/source/gui/gbutton.cpp index 648057060..df54062b8 100644 --- a/source/gui/gbutton.cpp +++ b/source/gui/gbutton.cpp @@ -107,6 +107,56 @@ void CGUIToggleButton::think(int _frames) +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUIValueButton::init(CGUIObject *_parent,GUIId _id) +{ + CGUIToggleButton::init(_parent,_id); + m_value=-1; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUIValueButton::setButtonValue(int _value) +{ + m_value=_value; +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CGUIValueButton::think(int _frames) +{ + ASSERT(getTarget()); + + CGUIObject::think(_frames); + if(isSelected()) + { + if(PadGetRepeat(0)&PAD_CROSS) + { + *getTarget()=m_value; + } + } +} + + + + + + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/gui/gbutton.h b/source/gui/gbutton.h index 16870b057..5695fc734 100644 --- a/source/gui/gbutton.h +++ b/source/gui/gbutton.h @@ -34,6 +34,7 @@ Structure defintions -------------------- */ +// Toggles a target int between true/false class CGUIToggleButton : public CGUIObject { public: @@ -54,7 +55,23 @@ private: }; +// Sets target to a specified value +class CGUIValueButton : public CGUIToggleButton +{ +public: + virtual void init(CGUIObject *_parent,GUIId _id=noId); + void setButtonValue(int _value); + + virtual void think(int _frames); + + +private: + int m_value; + +}; + +// Cycles target between a specified range of values class CGUICycleButton : public CGUIToggleButton { public: @@ -74,7 +91,7 @@ private: }; - +// Scrolls target between set limits class CGUISliderButton : public CGUIToggleButton { public: diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index ac85d9244..e6b4bd9cf 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -249,6 +249,14 @@ SOURCE=..\..\..\source\gui\gbutton.h # End Source File # Begin Source File +SOURCE=..\..\..\source\gui\gfactory.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\gui\gfactory.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\gui\gframe.cpp # End Source File # Begin Source File