/*========================================================================= greadout.cpp Author: PKG Created: Project: Spongebob Purpose: Copyright (c) 2000 Climax Development Ltd ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ #include "gui\greadout.h" #ifndef __GFX_FONT_H__ #include "gfx\font.h" #endif #ifndef __LOCALE_TEXTDBASE_H__ #include "locale\textdbase.h" #endif #ifndef __GFX_SPRBANK_H__ #include "gfx\sprbank.h" #endif #ifndef __PRIM_HEADER__ #include "gfx\prim.h" #endif /* Std Lib ------- */ /* Data ---- */ #ifndef __FILE_EQUATES_H__ #include #endif /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ /*---------------------------------------------------------------------- Vars ---- */ /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ 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; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUITextReadout::setReadoutTarget(int *_target) { m_target=_target; recalc(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUITextReadout::setReadoutData(TextReadoutData *_data) { m_data=_data; recalc(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUITextReadout::render() { FontBank *fb; if(!isHidden()) { getFontBank()->print((getW()-(BORDERWIDTH*2))/2,m_textY,m_textId); } CGUIObjectWithFont::render(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUITextReadout::think(int _frames) { CGUIObjectWithFont::think(_frames); if(*m_target!=m_lastValue) { recalc(); } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUITextReadout::recalc() { CGUIObjectWithFont::recalc(); if(m_data) { FontBank *fb; char *string; TextReadoutData *data; int tmp; m_lastValue=*m_target; fb=getFontBank(); m_textId=STR__DUMMY; data=m_data; do { if(m_lastValue==data->m_value) { m_textId=data->m_textId; break; } tmp=data->m_value; data++; } while(tmpm_value); string=(char*)TranslationDatabase::getString(m_textId); #ifdef __VERSION_DEBUG__ if(fb->getStringWidth(string)>getW()-(BORDERWIDTH*2)|| fb->getStringHeight(string)>getH()-(BORDERHEIGHT*2)) { GUI_DBGMSG("Text overflow in CGUITextReadout!"); } #endif m_textY=(getH()-(BORDERHEIGHT*2)-fb->getStringHeight(string))/2; } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUISpriteReadout::init(CGUIObject *_parent,GUIId _id) { CGUIObjectWithSpriteBank::init(_parent,_id); m_target=0; m_data=0; m_lastValue=-1; m_frame=0; m_x=m_y=0; setSpriteBank(SPRITES_SPRITES_SPR); } /*---------------------------------------------------------------------- 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()) { getSpriteBank()->printFT4(m_frame,getParentX()+m_x,getParentY()+m_y,0,0,getOt()); } CGUIObjectWithSpriteBank::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=getSpriteBank()->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; } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::init(CGUIObject *_parent,GUIId _id) { CGUIObject::init(_parent,_id); setReadoutTarget(0); setReadoutRange(0,255); m_markerOffset=0; m_lastValue=-1; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::setReadoutTarget(int *_target) { m_target=_target; recalc(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::setReadoutRange(int _min,int _max) { m_min=_min; m_max=_max; recalc(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::render() { POLY_G4 *g4; int x,y,w,h; int r,g,b; int ot; x=getX()+getParentX(); y=getY()+getParentY(); w=getW(); h=getH(); r=g=b=isSelected()?245:110; ot=getOt(); DrawLine(x,y+(h/2),x+w,y+(h/2),r,g,b,ot); DrawLine(x+m_markerOffset,y,x+m_markerOffset,y+h,r,g,b,ot); CGUIObject::render(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::think(int _frames) { if(m_lastValue!=*m_target) { recalc(); } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CGUIBarReadout::recalc() { if(m_target) { int w,offset; int scaler; scaler=(getW()<<8)/(m_max-m_min); offset=(scaler*(*m_target-m_min))>>8; m_markerOffset=offset; m_lastValue=*m_target; } } /*=========================================================================== end */