Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

RStatus.cpp

Go to the documentation of this file.
00001 // Copyright 2002 Kenneth Guy,
00002 // 
00003 // You are free to take the source and do as you wish with it.
00004 // However it would be nice if you let me know if the code was useful
00005 // to you and give me an acknowledgement if you use a significant portion
00006 // of the code in an application.
00007 // 
00008 // RStatus.cpp
00009 
00014 #include <e32std.h>
00015 #include <e32svr.h>
00016 
00017 #include "RStatus.h"
00018 
00020 RStatus::RStatus() :  iStatusData(NULL) {
00021 
00022 }
00023 
00033 TInt RStatus::Open(const TUint16 *aStatusData) {
00034   TInt error=iScreen.Open();
00035   if(error==KErrNone) {    
00036     iSavedScore=-1;
00037     iSavedLives=-1;
00038     iSavedHealth=-1;
00039     iStatusData=aStatusData;
00040     }  
00041   return(error);
00042 }
00043 
00045 void RStatus::Close() {
00046   iScreen.Close();
00047   iStatusData=NULL;
00048 }
00049 
00059 void RStatus::Draw(TInt aScore, TInt aLives, TInt aHealth) {
00060   iSavedScore=-1;
00061   iSavedLives=-1;
00062   iSavedHealth=-1;
00063   Update(aScore,aLives,aHealth);
00064 }
00065 
00076 void RStatus::Update(TInt aScore, TInt aLives, TInt aHealth) {
00077   if(iStatusData==NULL)
00078     return;
00079   TInt offset=0;
00080   if(iSavedScore==-1) {
00081     while(iStatusData[offset++]!=0xffff) {
00082       RScreenUtils::TPicture pics;
00083       pics.iData =  iStatusData+(iStatusData[offset++]/2);
00084       pics.iXSize=iStatusData[offset++];
00085       pics.iYSize=iStatusData[offset++];
00086       pics.iXPos=iStatusData[offset++];
00087       pics.iYPos=iStatusData[offset++];
00088       iScreen.DrawPicture(pics);
00089     }
00090   } else {
00091     while(iStatusData[offset++]!=0xffff) {};
00092   }
00093 
00094   UpdateSingle(offset,iSavedHealth,aHealth);
00095   // don't display the life the player is using
00096   UpdateSingle(offset,iSavedLives,aLives-1);
00097 
00098   if(iSavedScore!=aScore) {
00099     TUint16 x;
00100     TUint16 y;
00101     x=iStatusData[offset++];
00102     y=iStatusData[offset++];
00103     TUint16 foreColor=iStatusData[offset++];
00104     TUint16 backColor=iStatusData[offset++];
00105     iScreen.Number(x,y,aScore,foreColor,backColor);
00106     iSavedScore=aScore;
00107   }
00108 }
00109 
00122 void RStatus::UpdateSingle(TInt &aOffset,TInt &aSaved, TInt aNew) {
00123   RScreenUtils::TPicture picture;
00124   RScreenUtils::TBlank blank;
00125   picture.iData = iStatusData+(iStatusData[aOffset++]/2);
00126   picture.iXSize=iStatusData[aOffset++];
00127   blank.iXSize=picture.iXSize;
00128   picture.iYSize=iStatusData[aOffset++];
00129   blank.iYSize=picture.iYSize;
00130   blank.iColor=iStatusData[aOffset++];
00131   picture.iXPos=iStatusData[aOffset++];
00132   blank.iXPos=picture.iXPos;
00133   TInt pos=0;
00134   while(picture.iXPos!=0xffff) {
00135     picture.iYPos=iStatusData[aOffset++];
00136     blank.iYPos=picture.iYPos;
00137     pos++;
00138     
00139     if(pos<=aNew && pos > aSaved)
00140       iScreen.DrawPicture(picture);
00141     
00142     if(pos > aNew && pos <= aSaved)
00143       iScreen.BlankArea(blank);
00144     
00145     picture.iXPos=iStatusData[aOffset++];
00146     blank.iXPos=picture.iXPos;
00147   }
00148   aSaved=aNew;
00149 }
00150 
00151 

Documentation for Game (Beta) version 1.44.