00001
00002
00003
00004
00005
00006
00007
00008
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
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