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
[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
; ---------------------------------------------------------------

View File

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

View File

@ -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));
}
/*----------------------------------------------------------------------

View File

@ -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;i<MODE__COUNT;i++)
{
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);
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;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()
{
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;
}
@ -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;
}
}
/*----------------------------------------------------------------------

View File

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

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

View File

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

View File

@ -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