From 4876c7760b9e205023dc60d0e2a07ba7dee938c2 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 3 Nov 2000 00:07:42 +0000 Subject: [PATCH] --- data/translations/text.dat | 12 +++ makefile.gfx | 16 ++-- source/gui/gbutton.cpp | 3 +- source/gui/gframe.cpp | 46 +++++++++-- source/gui/greadout.cpp | 158 ++++++++++++++++++++++++++++++++++++- source/gui/greadout.h | 35 ++++++++ source/gui/gui.cpp | 12 +-- source/paul/paul.cpp | 129 ++++++++++++++++++++++++------ 8 files changed, 357 insertions(+), 54 deletions(-) diff --git a/data/translations/text.dat b/data/translations/text.dat index fbae79f9a..945651b71 100644 --- a/data/translations/text.dat +++ b/data/translations/text.dat @@ -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 + + + + + + diff --git a/makefile.gfx b/makefile.gfx index a776ea186..914618bbf 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -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) diff --git a/source/gui/gbutton.cpp b/source/gui/gbutton.cpp index b2461647b..5fa8285eb 100644 --- a/source/gui/gbutton.cpp +++ b/source/gui/gbutton.cpp @@ -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 diff --git a/source/gui/gframe.cpp b/source/gui/gframe.cpp index 1816bc9ce..4e316f0c7 100644 --- a/source/gui/gframe.cpp +++ b/source/gui/gframe.cpp @@ -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(); + } +///////////////////// + } } diff --git a/source/gui/greadout.cpp b/source/gui/greadout.cpp index f9f9eb5c4..24dbb625c 100644 --- a/source/gui/greadout.cpp +++ b/source/gui/greadout.cpp @@ -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 +#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(tmpm_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 */ \ No newline at end of file diff --git a/source/gui/greadout.h b/source/gui/greadout.h index 051cbee64..f3666ea5e 100644 --- a/source/gui/greadout.h +++ b/source/gui/greadout.h @@ -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; + +}; + + diff --git a/source/gui/gui.cpp b/source/gui/gui.cpp index 136e8fea5..624381be3 100644 --- a/source/gui/gui.cpp +++ b/source/gui/gui.cpp @@ -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() { diff --git a/source/paul/paul.cpp b/source/paul/paul.cpp index 8eaeee931..27a97f54c 100644 --- a/source/paul/paul.cpp +++ b/source/paul/paul.cpp @@ -77,6 +77,11 @@ /* Data ---- */ +#ifndef __SPR_UIGFX_H__ +#include +#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, 0, }, + { 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; - CGUIButton *bu; + 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,20 +258,24 @@ void CPaulScene::shutdown() Params: Returns: ---------------------------------------------------------------------- */ +int showDebugLog=false; void CPaulScene::render() { - int logCount; - int i,y,charHeight; - - logCount=getNumberOfDbgLinesInLog(); - y=20; - charHeight=s_fontBank.getCharHeight(); - for(i=0;irender(); }