3
#include "spriteBank.h"
13
void drawNumeral( int inNumber,
14
float inCenterX, float inCenterY,
15
Color *inColor, float inAlpha ) {
24
inNumber * 20 / 256.0f,
31
void drawNumeralBig( int inNumber,
32
float inCenterX, float inCenterY,
33
Color *inColor, float inAlpha ) {
37
drawSprite( numeralsBig,
41
inNumber * 40 / 512.0f,
48
void drawLetter( char inLetter,
49
float inCenterX, float inCenterY,
50
Color *inColor, float inAlpha ) {
53
SpriteHandle handle = abcdefghijkl;
56
float imageHeight = 256.0f;
60
if( inLetter == '+' ) {
66
inLetter = (char)tolower( inLetter );
68
if( inLetter >= 'a' && inLetter <= 'z' ) {
70
if( inLetter <= 'l' ) {
71
handle = abcdefghijkl;
72
indexOffset = inLetter - 'a';
74
else if( inLetter <= 'x' ) {
75
handle = mnopqrstuvwx;
76
indexOffset = inLetter - 'm';
80
indexOffset = inLetter - 'y';
85
printf( "Error: letter out of 'a-z' or '+' range: %c\n",
96
indexOffset * 20 / imageHeight,
102
void drawLetterBig( char inLetter,
103
float inCenterX, float inCenterY,
104
Color *inColor, float inAlpha ) {
107
SpriteHandle handle = abcdefghijkl_big;
110
float imageHeight = 512.0f;
114
if( inLetter == '+' ) {
117
imageHeight = 128.0f;
120
inLetter = (char)tolower( inLetter );
122
if( inLetter >= 'a' && inLetter <= 'z' ) {
124
if( inLetter <= 'l' ) {
125
handle = abcdefghijkl_big;
126
indexOffset = inLetter - 'a';
128
else if( inLetter <= 'x' ) {
129
handle = mnopqrstuvwx_big;
130
indexOffset = inLetter - 'm';
134
indexOffset = inLetter - 'y';
135
imageHeight = 128.0f;
139
printf( "Error: letter out of 'a-z' or '+' range: %c\n",
147
inCenterX, inCenterY,
150
indexOffset * 40 / imageHeight,
161
void drawScorePip( int inScore,
162
float inCenterX, float inCenterY,
163
Color *inColor, float inAlpha ) {
168
numDigits = (int)( floor( log10( inScore ) ) ) + 1;
172
// draw up to 9 digits
174
if( numDigits > 9 ) {
175
printf( "Error: more than 9 digits passed to drawScorePip: %d\n",
184
int centerOffsetsX[9] = {
196
int centerOffsetsY[9] = {
208
// find center of mass for all digits together
215
for( i=0; i<numDigits; i++ ) {
216
xSum += centerOffsetsX[ i ];
217
ySum += centerOffsetsY[ i ];
220
int cX = xSum / numDigits;
221
int cY = ySum / numDigits;
224
if( numDigits > 3 ) {
225
// center of mass doesn't look good for more than one row
229
if( numDigits < 7 ) {
230
cY = ( 10 + rowSep ) / 2;
239
for( i=0; i<numDigits; i++ ) {
241
int number = ( inScore / ( (int)( pow( 10, i ) ) ) ) % 10;
245
inCenterX - cX + centerOffsetsX[i],
246
inCenterY - cY + centerOffsetsY[i],
251
if( numDigits > 3 ) {
253
inCenterX - cX + centerOffsetsX[3] + 3 + colSep,
254
inCenterY - cY + centerOffsetsY[3] + 1,
257
if( numDigits > 6 ) {
259
inCenterX - cX + centerOffsetsX[6] + 3 + colSep,
260
inCenterY - cY + centerOffsetsY[6] + 1,
269
void drawScore( int inScore,
270
float inRightX, float inBottomY,
271
Color *inColor, float inAlpha ) {
277
numDigits = (int)( floor( log10( inScore ) ) ) + 1;
287
int startCX = (int)inRightX - 3;
289
int cY = (int)inBottomY - 5;
293
for( i=0; i<numDigits; i++ ) {
295
int number = ( inScore / ( (int)( pow( 10, i ) ) ) ) % 10;
297
if( i % 3 == 0 && i != 0 ) {
298
// make room for comma
300
// extra space around comma
310
if( i % 3 == 0 && i != 0 ) {
311
// comma after every 4th digit (between 3 and 4 )
320
// compute next numeral center, twelve digits per line
321
if( (i + 1) % 12 != 0 ) {
338
void drawScoreBig( int inScore,
339
float inRightX, float inBottomY,
340
Color *inColor, float inAlpha ) {
346
numDigits = (int)( floor( log10( inScore ) ) ) + 1;
356
int startCX = (int)inRightX - 6;
358
int cY = (int)inBottomY - 10;
362
for( i=0; i<numDigits; i++ ) {
364
int number = ( inScore / ( (int)( pow( 10, i ) ) ) ) % 10;
366
if( i % 3 == 0 && i != 0 ) {
367
// make room for comma
369
// extra space around comma
374
drawNumeralBig( number,
379
if( i % 3 == 0 && i != 0 ) {
380
// comma after every 4th digit (between 3 and 4 )
389
// compute next numeral center, six digits per line
390
if( (i + 1) % 6 != 0 ) {
405
void drawCounter( int inColSep, int inNumeralWidth,
406
void (*inNumeralDrawingFunction)(
410
float inCenterX, float inCenterY,
411
Color *inColor, float inAlpha ) {
416
numDigits = (int)( floor( log10( inCount ) ) ) + 1;
420
// draw up to 2 digits
422
if( numDigits > 2 ) {
423
printf( "Error: more than 2 digits passed to drawCounter: %d\n",
429
int numeralRadius = inNumeralWidth / 2;
431
int centerOffsetsX[2] = {
433
-( numeralRadius + inColSep ) };
435
// find center of mass for all digits together
441
for( i=0; i<numDigits; i++ ) {
442
xSum += centerOffsetsX[ i ];
445
int cX = xSum / numDigits;
448
for( i=0; i<numDigits; i++ ) {
450
int number = ( inCount / ( (int)( pow( 10, i ) ) ) ) % 10;
453
(*inNumeralDrawingFunction)( number,
454
inCenterX - cX + centerOffsetsX[i],
463
void drawCounter( int inCount,
464
float inCenterX, float inCenterY,
465
Color *inColor, float inAlpha ) {
467
drawCounter( 3, 6, drawNumeral,
469
inCenterX, inCenterY,
475
void drawCounterBig( int inCount,
476
float inCenterX, float inCenterY,
477
Color *inColor, float inAlpha ) {
479
drawCounter( 6, 12, drawNumeralBig,
481
inCenterX, inCenterY,
488
void drawString( int inColSep, int inLetterW,
489
void (*inLetterDrawingFunction)(
494
float inX, float inY,
495
Color *inColor, float inAlpha ) {
497
int numChars = strlen( inString );
500
int colSep = inColSep;
501
int letterW = inLetterW;
503
int stringW = numChars * letterW + (numChars-1) * colSep;
507
int startXC = (int)inX;
514
startXC -= stringW / 2;
521
startXC += letterW / 2;
525
int currentXC = startXC;
528
for( int i=0; i<numChars; i++ ) {
530
char c = inString[i];
532
// skip drawing anything for space
534
(*inLetterDrawingFunction)( c, currentXC, inY, inColor, inAlpha );
539
currentXC += colSep + letterW;
545
void drawString( char *inString,
547
float inX, float inY,
548
Color *inColor, float inAlpha ) {
559
void drawStringBig( char *inString,
561
float inX, float inY,
562
Color *inColor, float inAlpha ) {