This commit is contained in:
Paul 2000-11-03 00:07:42 +00:00
parent fcaef22819
commit 4876c7760b
8 changed files with 357 additions and 54 deletions

View File

@ -46,3 +46,15 @@ eng=This is another test string with more text.
[STR__PAULS_TEST_STRING_3]
eng=Finally, another example containing wordage of increased length.
[STR__PAULS_TEST__CONTROL_TYPE]
eng=CONTROL TYPE
[STR__PAULS_TEST__MUSIC]
eng=MUSIC
[STR__PAULS_TEST__SFX]
eng=SFX

View File

@ -89,18 +89,12 @@ UI_GFX_OUT_DIR := $(DATA_OUT)/ui
UI_GFX_FONT_IN := $(GRAF_DIR)/ui/font/font.anm
UI_GFX_NONTRANS :=
UI_GFX_NONTRANS_IN := $(foreach FILE,$(UI_GFX_NONTRANS),$(UI_NONTRANS_DIR)/$(FILE))
UI_GFX_NONTRANS_IN := $(foreach FILE,$(UI_GFX_NONTRANS),$(UI_GFX_DIR)/$(FILE))
UI_GFX_TRANS :=
UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_TRANS_DIR)/$(FILE).bmp)
UI_GFX_TRANS := +cross.bmp +tick.bmp
UI_GFX_TRANS_IN := $(foreach FILE,$(UI_GFX_TRANS),$(UI_GFX_DIR)/$(FILE))
UI_GFX_TRANS2 :=
UI_GFX_TRANS2_IN := $(foreach FILE,$(UI_GFX_TRANS2),$(UI_NONTRANS_DIR)/$(FILE))
UI_GFX_NO_ROT :=
UI_GFX_NO_ROT_IN :=
UI_GFX_TEX_IN := $(UI_GFX_FONT_IN) ${UI_GFX_NONTRANS_IN} ${UI_GFX_TRANS_IN} ${UI_GFX_TRANS2_IN} ${UI_GFX_NO_ROT_IN}
UI_GFX_TEX_IN := $(UI_GFX_FONT_IN) ${UI_GFX_NONTRANS_IN} ${UI_GFX_TRANS_IN}
UI_GFX_TEX_OUT := $(UI_GFX_OUT_DIR)/UIGfx.Spr
UI_GFX_REP_FILE := $(REPORT_DIR)/UIGfx.rep
UI_GFX_HDR_FILE := $(INC_DIR)/UIGfx.h
@ -111,7 +105,7 @@ cleanuigfx :
uigfx: $(UI_GFX_TEX_IN)
$(UI_GFX_TEX_OUT) : $(UI_GFX_TEX_IN)
@parkgrab -c+ -z+ $(UI_GFX_FONT_IN) ${UI_GFX_TRANS_IN} -c+ -z- ${UI_GFX_NONTRANS_IN} -c- -z- ${UI_GFX_TRANS2_IN} -r- ${UI_GFX_NO_ROT_IN} -b+ -t:31,1,1 -l:$(REPORT_DIR)/ui.lbm -o:$(UI_GFX_TEX_OUT) -k:$(UI_GFX_REP_FILE)
@parkgrab -c+ -z+ $(UI_GFX_FONT_IN) ${UI_GFX_TRANS_IN} -c+ -z- ${UI_GFX_NONTRANS_IN} -b+ -t:31,1,1 -l:$(REPORT_DIR)/ui.lbm -o:$(UI_GFX_TEX_OUT) -k:$(UI_GFX_REP_FILE)
@$(MV) -f $(UI_GFX_OUT_DIR)/uigfx.h $(UI_GFX_HDR_FILE)
GFX_DATA_OUT += $(UI_GFX_TEX_OUT)

View File

@ -80,6 +80,7 @@ void CGUIButton::think(int _frames)
ASSERT(m_target);
ASSERT(m_data);
CGUIObject::think(_frames);
if(isSelected())
{
int pad;
@ -89,7 +90,7 @@ void CGUIButton::think(int _frames)
{
int *data;
int tmp;
GUI_DBGMSG("*C*L*I*C*K");
data=m_data;
tmp=*data;
do

View File

@ -107,7 +107,6 @@ int CGUIGroupFrame::isSelectable()
pGUI=pGUI->getNext();
}
GUI_DBGMSG("frame is %s",selectable?"SELECTABLE":"NOT SELECTABLE");
return selectable;
}
@ -143,18 +142,55 @@ void CGUIControlFrame::think(int _frames)
pGUI=pGUI->getNext();
}
pGUI->unselect();
GUI_DBGMSG("unselected %d",pGUI->getId());
// Find next selectbale object and select it
while(!pGUI->isSelectable())
// Find next selectable object and select it
do
{
pGUI=pGUI->getNext();
if(!pGUI)pGUI=getChild();
}
while(!pGUI->isSelectable());
pGUI->select();
GUI_DBGMSG("selected %d",pGUI->getId());
}
}
else if(pad&PAD_UP)
{
/////////////////////
CGUIObject *pGUI,*prevGUI;
pGUI=getChild();
prevGUI=0;
if(pGUI)
{
// Get current selection and deselect it
while(!pGUI->isSelected())
{
ASSERT(pGUI);
if(pGUI->isSelectable())
{
prevGUI=pGUI;
}
pGUI=pGUI->getNext();
}
pGUI->unselect();
// Find previous selectable object and select it
if(!prevGUI)
{
do
{
if(pGUI->isSelectable())
{
prevGUI=pGUI;
}
pGUI=pGUI->getNext();
}
while(pGUI);
}
prevGUI->select();
}
/////////////////////
}
}

View File

@ -26,6 +26,10 @@
#include "locale\textdbase.h"
#endif
#ifndef __GFX_SPRBANK_H__
#include "gfx\sprbank.h"
#endif
/* Std Lib
------- */
@ -33,6 +37,11 @@
/* Data
---- */
#ifndef __FILE_EQUATES_H__
#include <biglump.h>
#endif
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
@ -60,7 +69,9 @@ void CGUITextReadout::init(CGUIObject *_parent,GUIId _id)
CGUIObjectWithFont::init(_parent,_id);
m_target=0;
m_data=0;
m_lastValue=-1;
m_textId=TranslationDatabase::NO_STRING;
m_textY=0;
}
@ -142,10 +153,7 @@ void CGUITextReadout::recalc()
int tmp;
m_lastValue=*m_target;
m_textId=4;
fb=getFontBank();
m_textId=STR__DUMMY;
data=m_data;
do
@ -174,5 +182,149 @@ void CGUITextReadout::recalc()
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::init(CGUIObject *_parent,GUIId _id)
{
CGUIObject::init(_parent,_id);
m_target=0;
m_data=0;
m_sprites=new ("SpriteReadout:sprites") SpriteBank();
m_sprites->load(UI_UIGFX_SPR);
m_lastValue=-1;
m_frame=0;
m_x=m_y=0;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::shutdown()
{
CGUIObject::shutdown();
m_sprites->dump(); delete m_sprites; m_sprites=0;
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::setReadoutTarget(int *_target)
{
m_target=_target;
recalc();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::setReadoutData(SpriteReadoutData *_data)
{
m_data=_data;
recalc();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::render()
{
FontBank *fb;
if(!isHidden())
{
m_sprites->printFT4(m_frame,getParentX()+m_x,getParentY()+m_y,0,0,getOt());
}
CGUIObject::render();
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::think(int _frames)
{
CGUIObject::think(_frames);
if(*m_target!=m_lastValue)
{
recalc();
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CGUISpriteReadout::recalc()
{
CGUIObject::recalc();
if(m_data)
{
char *string;
SpriteReadoutData *data;
int tmp;
sFrameHdr *fh;
int x,y;
m_lastValue=*m_target;
m_frame=0;
data=m_data;
do
{
if(m_lastValue==data->m_value)
{
m_frame=data->m_frame;
break;
}
tmp=data->m_value;
data++;
}
while(tmp<data->m_value);
fh=m_sprites->getFrameHeader(m_frame);
#ifdef __VERSION_DEBUG__
if(fh->W>getW()-(BORDERWIDTH*2)||
fh->H>getH()-(BORDERHEIGHT*2))
{
GUI_DBGMSG("Sprite overflow in CGUISpriteReadout!");
}
#endif
m_x=getX()+(getW()-fh->W)/2;
m_y=getY()+(getH()-fh->H)/2;
}
}
/*===========================================================================
end */

View File

@ -67,6 +67,41 @@ private:
};
class CGUISpriteReadout : public CGUIObject
{
public:
typedef struct
{
int m_value;
int m_frame;
} SpriteReadoutData;
virtual void init(CGUIObject *_parent,GUIId _id);
virtual void shutdown();
virtual void setReadoutTarget(int *_target);
virtual void setReadoutData(SpriteReadoutData *_data);
virtual void render();
virtual void think(int _frames);
protected:
void recalc();
private:
int *m_target;
SpriteReadoutData *m_data;
class SpriteBank *m_sprites;
int m_lastValue;
int m_frame;
int m_x,m_y;
};

View File

@ -92,8 +92,7 @@ void CGUIObject::init(CGUIObject *_parent,GUIId _id)
}
else
{
// PKG - Need to add some code to check that only one bastard ( that is, parentless :) object
// is ever in existance.
// This object is a bastard :)
GUI_DBGMSG("INFO: GUI object without parent created!");
setOt(INITIAL_OT);
}
@ -114,22 +113,19 @@ void CGUIObject::shutdown()
if(m_next)m_next->shutdown(); m_next=NULL;
m_parent=NULL;
// Is this actually safe? Not really.. (PKG)
// Is this actually safe? Not *really* (PKG)
delete this;
}
/*----------------------------------------------------------------------
Function:
Purpose: NB: The chain of render functions needs to be reversed so
that the draworder is correct! Look at any subclasses
render() function to see what I mean by this.. (PKG)
um.. or does it?
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
#ifdef __USER_paul__
int forceBorderDraw=true;
int forceBorderDraw=false;
#endif
void CGUIObject::render()
{

View File

@ -77,6 +77,11 @@
/* Data
---- */
#ifndef __SPR_UIGFX_H__
#include <uigfx.h>
#endif
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
@ -105,36 +110,104 @@ unsigned int str=STR__PAULS_TEST_STRING_1;
int w=150;
int h=40;
int testValue=0;
CGUITextReadout::TextReadoutData testReadoutData[]=
CGUITextReadout::TextReadoutData onOffTextReadouts[]=
{
{ 1, STR__PAULS_TEST_STRING_1, },
{ 2, STR__PAULS_TEST_STRING_2, },
{ 3, STR__PAULS_TEST_STRING_3, },
{ 0, STR__ON, },
{ 1, STR__OFF, },
{ 0, 0, },
};
int testButtonData[]=
CGUISpriteReadout::SpriteReadoutData onOffSpriteReadouts[]=
{
1,2,3,
{ 0, FRM__CROSS, },
{ 1, FRM__TICK, },
{ 0, 0, },
};
int onOffValues[]=
{
0,1,
0,
};
int musicStatus=0;
int sfxStatus=0;
CGUIControlFrame *baseGUIObject;
void CPaulScene::init()
{
CGUITextBox *tb;
CGUITextReadout *tr;
CGUIGroupFrame *fr;
CGUITextBox *tb;
CGUIButton *bu;
CGUITextReadout *tr;
CGUISpriteReadout *sr;
s_fontBank.initialise(&standardFont);
baseGUIObject=new ("Uber GUI object") CGUIControlFrame();
baseGUIObject->init(NULL,0);
baseGUIObject->setObjectXYWH(32,100,512-64,120);
baseGUIObject->init(NULL,1);
baseGUIObject->setObjectXYWH(32,32,512-64,256-64);
fr=new ("frame") CGUIGroupFrame();
fr->init(baseGUIObject,2);
fr->setObjectXYWH(10,10,448-20,30);
tb=new ("textbox") CGUITextBox();
tb->init(fr,20);
tb->setObjectXYWH(0,0,300,30);
tb->setText(STR__PAULS_TEST__MUSIC);
bu=new ("button") CGUIButton();
bu->init(fr,21);
// bu->setObjectXYWH(0,0,0,0);
bu->setButtonTarget(&musicStatus);
bu->setButtonData(onOffValues);
tr=new ("textreadout") CGUITextReadout();
tr->init(fr,22);
tr->setObjectXYWH(300,0,128,30);
tr->setReadoutTarget(&musicStatus);
tr->setReadoutData(onOffTextReadouts);
fr=new ("frame") CGUIGroupFrame();
fr->init(baseGUIObject,3);
fr->setObjectXYWH(10,50,448-20,30);
tb=new ("textbox") CGUITextBox();
tb->init(fr,30);
tb->setObjectXYWH(0,0,300,30);
tb->setText(STR__PAULS_TEST__SFX);
bu=new ("button") CGUIButton();
bu->init(fr,31);
// bu->setObjectXYWH(0,0,0,0);
bu->setButtonTarget(&sfxStatus);
bu->setButtonData(onOffValues);
sr=new ("spritereadout") CGUISpriteReadout();
sr->init(fr,32);
sr->setObjectXYWH(300,0,128,30);
sr->setReadoutTarget(&sfxStatus);
sr->setReadoutData(onOffSpriteReadouts);
fr=new ("frame") CGUIGroupFrame();
fr->init(baseGUIObject,3);
fr->setObjectXYWH(10,90,448-20,30);
tb=new ("textbox") CGUITextBox();
tb->init(fr,30);
tb->setObjectXYWH(0,0,300,30);
tb->setText(STR__PAULS_TEST__SFX);
bu=new ("button") CGUIButton();
bu->init(fr,31);
// bu->setObjectXYWH(0,0,0,0);
bu->setButtonTarget(&sfxStatus);
bu->setButtonData(onOffValues);
sr=new ("spritereadout") CGUISpriteReadout();
sr->init(fr,32);
sr->setObjectXYWH(300,0,128,30);
sr->setReadoutTarget(&sfxStatus);
sr->setReadoutData(onOffSpriteReadouts);
/*
tb=new ("textbox") CGUITextBox();
tb->init(baseGUIObject,1);
tb->setObjectXYWH(10,10,400,25);
@ -158,7 +231,7 @@ void CPaulScene::init()
tr->setObjectXYWH(10,70,400,25);
tr->setReadoutTarget(&testValue);
tr->setReadoutData(testReadoutData);
*/
// Heh.. this'll actually work =)
// baseGUIObject->shutdown();
@ -185,11 +258,14 @@ void CPaulScene::shutdown()
Params:
Returns:
---------------------------------------------------------------------- */
int showDebugLog=false;
void CPaulScene::render()
{
if(showDebugLog)
{
int logCount;
int i,y,charHeight;
logCount=getNumberOfDbgLinesInLog();
y=20;
charHeight=s_fontBank.getCharHeight();
@ -198,6 +274,7 @@ void CPaulScene::render()
s_fontBank.print(20,y,getDbgLineFromLog(i));
y+=charHeight;
}
}
baseGUIObject->render();
}