This commit is contained in:
Paul 2000-11-22 22:52:08 +00:00
parent 06aa78b482
commit 8df9ff4010
8 changed files with 244 additions and 81 deletions

View File

@ -46,10 +46,32 @@ eng=PRESS START
eng=START GAME eng=START GAME
[STR__FRONTEND__OPTIONS] [STR__FRONTEND__OPTIONS]
eng=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] [STR__FRONTEND__EXIT]
eng=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
; --------------------------------------------------------------- ; ---------------------------------------------------------------

View File

@ -75,6 +75,7 @@ gfx_src := prim \
gui_src := gui \ gui_src := gui \
gbutton \ gbutton \
gfactory \
gframe \ gframe \
greadout \ greadout \
gtextbox gtextbox

View File

@ -18,10 +18,6 @@
#include "frontend\maintitl.h" #include "frontend\maintitl.h"
#ifndef __MEMORY_HEADER__
#include "mem\memory.h"
#endif
#ifndef __GFX_SPRBANK_H__ #ifndef __GFX_SPRBANK_H__
#include "gfx\sprbank.h" #include "gfx\sprbank.h"
#endif #endif
@ -46,22 +42,14 @@
#include "gfx\fader.h" #include "gfx\fader.h"
#endif #endif
#ifndef __GUI_GUI_H__ #ifndef __GUI_GFACTORY_H__
#include "gui\gui.h" #include "gui\gfactory.h"
#endif
#ifndef __GUI_GTEXTBOX_H__
#include "gui\gtextbox.h"
#endif #endif
#ifndef __GUI_GFRAME_H__ #ifndef __GUI_GFRAME_H__
#include "gui\gframe.h" #include "gui\gframe.h"
#endif #endif
#ifndef __GUI_GBUTTON_H__
#include "gui\gbutton.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -111,15 +99,8 @@ int sval=0;
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int mem;
void CFrontEndMainTitles::init() 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=new ("MainTitle Sprites") SpriteBank();
m_sprites->load(FRONTEND_FRONTEND_SPR); m_sprites->load(FRONTEND_FRONTEND_SPR);
@ -127,36 +108,26 @@ PAUL_DBGMSG("initial mem free=%d",mem);
m_smallFont->initialise(&standardFont); m_smallFont->initialise(&standardFont);
m_smallFont->setJustification(FontBank::JUST_CENTRE); 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=new ("Main Menu GUI") CGUIControlFrame();
m_mainMenu->init(NULL); m_mainMenu->init(NULL);
m_mainMenu->setObjectXYWH(106,140,300,40); m_mainMenu->setObjectXYWH(106,140,300,60);
m_mainMenu->clearFlags(CGUIObject::FLAG_DRAWBORDER); m_mainMenu->clearFlags(CGUIObject::FLAG_DRAWBORDER);
fr=new ("frame") CGUIGroupFrame(); CGUIFactory::createValueButtonFrame(m_mainMenu,
fr->init(m_mainMenu); 50,0,200,20,
fr->setObjectXYWH(50,0,200,20); STR__FRONTEND__START_GAME,
tb=new ("textbox") CGUITextBox(); &m_startGameFlag,true);
tb->init(fr); CGUIFactory::createValueButtonFrame(m_mainMenu,
tb->setObjectXYWH(0,0,200,20); 50,20,200,20,
tb->setText(STR__FRONTEND__START_GAME); STR__FRONTEND__OPTIONS,
tg=new ("togglebutton") CGUIToggleButton(); &m_gotoOptionsFlag,true);
tg->init(fr); CGUIFactory::createValueButtonFrame(m_mainMenu,
tg->setButtonTarget(&m_startGameFlag); 50,40,200,20,
STR__FRONTEND__CREDITS,
fr=new ("frame") CGUIGroupFrame(); &m_gotoOptionsFlag,true);
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);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -168,7 +139,6 @@ void CFrontEndMainTitles::shutdown()
m_mainMenu->shutdown(); // GUI items delete themselves when shutdown.. m_mainMenu->shutdown(); // GUI items delete themselves when shutdown..
m_smallFont->dump(); delete m_smallFont; m_smallFont->dump(); delete m_smallFont;
m_sprites->dump(); delete m_sprites; m_sprites->dump(); delete m_sprites;
PAUL_DBGMSG("change=%d",mem-(MainRam.TotalRam-MainRam.RamUsed));
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View File

@ -34,26 +34,22 @@
#include "gfx\prim.h" #include "gfx\prim.h"
#endif #endif
#ifndef __GUI_GUI_H__ #ifndef __GUI_GFACTORY_H__
#include "gui\gui.h" #include "gui\gfactory.h"
#endif
#ifndef __GUI_GTEXTBOX_H__
#include "gui\gtextbox.h"
#endif #endif
#ifndef __GUI_GFRAME_H__ #ifndef __GUI_GFRAME_H__
#include "gui\gframe.h" #include "gui\gframe.h"
#endif #endif
#ifndef __GUI_GBUTTON_H__
#include "gui\gbutton.h"
#endif
#ifndef __LOCALE_TEXTDBASE_H__ #ifndef __LOCALE_TEXTDBASE_H__
#include "locale\textdbase.h" #include "locale\textdbase.h"
#endif #endif
#ifndef __SOUND_SOUND_H__
#include "sound\sound.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -90,27 +86,72 @@
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CFrontEndOptions::init() void CFrontEndOptions::init()
{ {
CGUIGroupFrame *fr; int i;
CGUITextBox *tb;
CGUIToggleButton *tg;
m_background=new ("Options Background") CScrollyBackground(); m_background=new ("Options Background") CScrollyBackground();
m_background->init(); m_background->init();
m_optionsMenu=new ("Options GUI") CGUIControlFrame(); // Create the menu frames
m_optionsMenu->init(NULL); for(i=0;i<MODE__COUNT;i++)
m_optionsMenu->setObjectXYWH(50,40,412,176); {
CGUIControlFrame **mm=&m_modeMenus[i];
*mm=new ("optionsframe") CGUIControlFrame();
(*mm)->init(NULL);
(*mm)->setObjectXYWH(50,40,412,176);
}
fr=new ("frame") CGUIGroupFrame();
fr->init(m_optionsMenu); // Populate OPTIONS menu
fr->setObjectXYWH(50,0,200,20); CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS],
tb=new ("textbox") CGUITextBox(); X_BORDER,Y_BORDER,412-(X_BORDER*2),20,
tb->init(fr); STR__FRONTEND__CONTROLS,
tb->setObjectXYWH(0,0,200,20); &m_nextMode,MODE__CONTROL);
tb->setText(STR__FRONTEND__EXIT); CGUIFactory::createValueButtonFrame(m_modeMenus[MODE__OPTIONS],
tg=new ("togglebutton") CGUIToggleButton(); X_BORDER,Y_BORDER+30,412-(X_BORDER*2),20,
tg->init(fr); STR__FRONTEND__SCREEN,
tg->setButtonTarget(&m_exitFlag); &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;i<MODE__COUNT;i++)
{
CGUIFactory::createValueButtonFrame(m_modeMenus[i],
X_BORDER,176-Y_BORDER-20,412-(X_BORDER*2),20,
STR__FRONTEND__BACK,
&m_nextMode,MODE__OPTIONS);
}
m_bgmVolume=CSoundMediator::getVolume(CSoundMediator::SONG);
m_sfxVolume=CSoundMediator::getVolume(CSoundMediator::SFX);
m_speechVolume=CSoundMediator::getVolume(CSoundMediator::SPEECH);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -121,7 +162,13 @@ void CFrontEndOptions::init()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CFrontEndOptions::shutdown() void CFrontEndOptions::shutdown()
{ {
m_optionsMenu->shutdown(); int i;
for(i=0;i<MODE__COUNT;i++)
{
CGUIControlFrame **mm=&m_modeMenus[i];
(*mm)->shutdown();
}
m_background->shutdown(); delete m_background; m_background->shutdown(); delete m_background;
} }
@ -133,7 +180,9 @@ void CFrontEndOptions::shutdown()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CFrontEndOptions::select() void CFrontEndOptions::select()
{ {
m_optionsMenu->select(); m_modeMenus[MODE__OPTIONS]->select();
m_mode=m_nextMode=MODE__OPTIONS;
m_exitFlag=false; m_exitFlag=false;
m_closingDown=false; m_closingDown=false;
@ -149,7 +198,7 @@ void CFrontEndOptions::select()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CFrontEndOptions::unselect() void CFrontEndOptions::unselect()
{ {
m_optionsMenu->unselect(); m_modeMenus[m_mode]->unselect();
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -172,7 +221,7 @@ void CFrontEndOptions::render()
m_background->render(); m_background->render();
m_optionsMenu->render(); m_modeMenus[m_mode]->render();
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -192,7 +241,32 @@ void CFrontEndOptions::think(int _frames)
if(!CFader::isFading()) 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) if(!m_closingDown&&m_exitFlag)
@ -200,6 +274,7 @@ void CFrontEndOptions::think(int _frames)
CFader::setFadingOut(); CFader::setFadingOut();
m_closingDown=true; m_closingDown=true;
} }
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View File

@ -49,13 +49,33 @@ public:
private: private:
enum
{
MODE__OPTIONS,
MODE__CONTROL,
MODE__SCREEN,
MODE__SOUND,
MODE__COUNT,
};
enum
{
X_BORDER=30,
Y_BORDER=20,
};
class CScrollyBackground *m_background; class CScrollyBackground *m_background;
class CGUIControlFrame *m_optionsMenu; class CGUIControlFrame *m_modeMenus[MODE__COUNT];
int m_mode,m_nextMode;
int m_exitFlag; int m_exitFlag;
int m_closingDown; int m_closingDown;
int m_bgmVolume;
int m_sfxVolume;
int m_speechVolume;
}; };

View File

@ -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: Function:
Purpose: Purpose:

View File

@ -34,6 +34,7 @@
Structure defintions Structure defintions
-------------------- */ -------------------- */
// Toggles a target int between true/false
class CGUIToggleButton : public CGUIObject class CGUIToggleButton : public CGUIObject
{ {
public: 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 class CGUICycleButton : public CGUIToggleButton
{ {
public: public:
@ -74,7 +91,7 @@ private:
}; };
// Scrolls target between set limits
class CGUISliderButton : public CGUIToggleButton class CGUISliderButton : public CGUIToggleButton
{ {
public: public:

View File

@ -249,6 +249,14 @@ SOURCE=..\..\..\source\gui\gbutton.h
# End Source File # End Source File
# Begin 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 SOURCE=..\..\..\source\gui\gframe.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File