void VictoryScreen::Draw(Core::Graphics& graphics) { graphics.DrawString((int)SCREEN_WIDTH / 2 - 15, (int)SCREEN_HEIGHT / 2,"YOU WON"); graphics.DrawString((int)SCREEN_WIDTH / 2 - 190, (int)SCREEN_HEIGHT / 2 + 10,"Press R To Go Back To The Intro Screen Or Escape To Quit"); graphics.DrawString((int)SCREEN_WIDTH / 2 - 22, (int)SCREEN_HEIGHT / 2 + 20,"Score: "); util.DrawValue(graphics,(int)SCREEN_WIDTH / 2 + 22, (int)SCREEN_HEIGHT / 2 + 20, score); }
void IntroScreen::Draw(Core::Graphics& graphics) { graphics.DrawString((int)SCREEN_WIDTH / 2 - 40,(int)SCREEN_HEIGHT / 5, "Press F To Begin"); graphics.DrawString((int)SCREEN_WIDTH / 2 - 42,(int)SCREEN_HEIGHT / 5 + 10, "Press ESC To Quit"); graphics.DrawString((int)SCREEN_WIDTH / 2 - 30, 0,"High Score: "); util.DrawValue(graphics,(int)SCREEN_WIDTH / 2 + 55, 0, score); hero->Draw(graphics); }
void GameplayFrame::DebugFrameMemory(Core::Graphics& graphics) { graphics.SetColor(RGB(255,255,255)); _CrtMemState myState; _CrtMemCheckpoint(&myState); myState.lCounts; char buf[50]; sprintf_s(buf, "Current count: %i", myState.lCounts[_CLIENT_BLOCK]); graphics.DrawString(20, 870, buf); sprintf_s(buf, "Current size: %i", myState.lSizes[_CLIENT_BLOCK]); graphics.DrawString(20, 890, buf); sprintf_s(buf, "Current HighWaterCount: %i", myState.lHighWaterCount); graphics.DrawString(20, 910, buf); }
void DrawValue::drawValue(Core::Graphics& graphics, int x, int y, float num) { stringstream ss; ss << num; graphics.DrawString(x, y, ss.str().c_str()); }
void DrawValue::drawValue(Core::Graphics& graphics, int x, int y, Engine::Vector3D vector) { stringstream ss; ss << "<"; ss << vector.vector_x; ss << ", "; ss << vector.vector_y; ss << ">"; graphics.DrawString(x, y, ss.str().c_str()); }
void DrawValue(Core::Graphics& graphics, int x, int y, Matrix3 mat) { mat; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ stringstream ss; ss.precision(5); ss << mat.mat[j][i]; graphics.DrawString(x + i * 75, y + j * 12, ss.str().c_str()); } } }
void DrawValue::drawValue(Core::Graphics& graphics, int x, int y, Engine::Matrix3D matrix){ const int length = 3; stringstream ss[length][length]; for(unsigned int i = 0; i < length; i++) { int movingX = x; for(unsigned int j = 0; j < length; j++) { float trunc = floor((matrix.matrix[i][j] * 1000)/1000); ss[i][j] << trunc; graphics.DrawString(movingX,y,ss[i][j].str().c_str()); movingX += 20; } y+= 20; } }
void Grid::draw(Core::Graphics& g) { for(int i = 0; i<numRows; i++) { for(int j = 0; j<numColumns; j++) { cells[i][j].draw(g); } } if(enemies.numActiveTroops==0) { g.SetColor(RGB(50,255,50)); } else g.SetColor(RGB(200,50,50)); g.DrawString((int)(cells[9][0].position.x+(cells[9][0].width/2))-30,(int)(cells[9][0].position.y+(cells[9][0].height/2))-10, "COMPILE"); g.DrawLine(cells[9][0].position.x, cells[9][0].position.y, cells[9][0].position.x+cells[9][0].width, cells[9][0].position.y); g.DrawLine(cells[9][0].position.x+cells[9][0].width, cells[9][0].position.y, cells[9][0].position.x+cells[9][0].width, cells[9][0].position.y+cells[9][0].height); enemies.draw(g, Vector3D(100,100)); }
void Upgrade::viewText(Core::Graphics& graphics) { graphics.SetColor(RGB(6, 196, 130)); graphics.DrawLine(position.x + (float)BOX_SIZE/2, position.y + (float)BOX_SIZE/4, position.x + (float)BOX_SIZE/2+50.0f, position.y - 200.0f); graphics.DrawLine(position.x + (float)BOX_SIZE/2+50.0f, position.y - 200.0f, position.x+(float)BOX_SIZE/2+400.0f, position.y-200.0f); if(type == armor) { graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-180.0f), "The armor upgrade increases the rate"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-160.0f), "at which your armor regens out of combat."); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-140.0f), "Your ship regens no armor until the first"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-120.0f), "upgrade has been purchased. The ship is"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-100.0f), "'out of combat' when you haven't taken"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-80.0f), "damage in over five seconds."); } else if(type == fuel) { graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-180.0f), "The fuel upgrade increases the overall"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-160.0f), "efficiency of your spacecraft. What this"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-140.0f), "acutally means is that your fuel doesn't"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-120.0f), "drain like a Hummer's anymore. You've"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-100.0f), "gotta love that one mile to the gallon."); } else if(type == health) { graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-180.0f), "The repair upgrade increases the rate"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-160.0f), "at which these small sort-of space wrenches"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-140.0f), "spawn that increase your ship's health"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-120.0f), "when picked up. The first upgrade causes"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-100.0f), "the wrenches to start spawning whilst"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-80.0f), "continual upgrades decrease the spawn time."); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-60.0f), "Spawn times (seconds): 60/45/30/20/15. "); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-40.0f), "WARNING: The spawn time resets when "); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-20.0f), "you purchase this upgrade to the new time."); } else if(type == bullet) { graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-180.0f), "The bullet upgrade increases the damage "); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-160.0f), "that your bullets deal to targets. Oh "); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-140.0f), "yeah by the way the enemies' health scale"); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-120.0f), "as the time goes on so this upgrade might be "); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-100.0f), "a good idea, just saying."); graphics.DrawString(int(position.x + (float)BOX_SIZE/2+100.0f), int(position.y-80.0f), "Damage: 1(no upgrades)/2/3/5/8/12"); } }
void Upgrade::DrawLetters(Core::Graphics& graphics, float thickness) { char buf[50]; sprintf_s(buf, "%f", upgradeCost); graphics.DrawString(0,0, buf); atTheDot = false; int currentLetter = 1; for(int i=0; i<50; i++) { if(!atTheDot) { switch(buf[i]) { case('0'): DrawVerticalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap, costPosition.y)); DrawVerticalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+(Letter_Size-thickness), costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-2*thickness, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+thickness, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-2*thickness, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+thickness, costPosition.y+(Letter_Size-thickness))); currentLetter++; break; case('1'): DrawHorizontalBar(graphics, thickness, (Letter_Size-thickness)/4, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+ (Letter_Size-thickness)/4, costPosition.y+(Letter_Size-thickness)/4)); DrawVerticalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+((Letter_Size-thickness)/2), costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness*2, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+(Letter_Size-thickness)/4, costPosition.y+Letter_Size-thickness)); currentLetter++; break; case('2'): DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y + thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+thickness+((Letter_Size-3*thickness)/2))); DrawVerticalBar(graphics, thickness,(Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y + thickness*2+((Letter_Size-3*thickness)/2))); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+2*thickness + 2*((Letter_Size-3*thickness)/2))); currentLetter++; break; case('3'): DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y + thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+thickness+((Letter_Size-3*thickness)/2))); DrawVerticalBar(graphics, thickness,(Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y + thickness*2+((Letter_Size-3*thickness)/2))); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+2*thickness + 2*((Letter_Size-3*thickness)/2))); currentLetter++; break; case('4'): DrawVerticalBar(graphics, thickness, ((Letter_Size-thickness)/2)+thickness, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness*2, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+thickness, costPosition.y+((Letter_Size-thickness)/2))); DrawVerticalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+currentLetter*Letter_Size+currentLetter*Letter_Gap+(Letter_Size-thickness), costPosition.y)); currentLetter++; break; case('5'): DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y + thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+thickness+((Letter_Size-3*thickness)/2))); DrawVerticalBar(graphics, thickness,(Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y + thickness*2+((Letter_Size-3*thickness)/2))); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+2*thickness + 2*((Letter_Size-3*thickness)/2))); currentLetter++; break; case('6'): DrawVerticalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+thickness, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+thickness, costPosition.y+((Letter_Size-3*thickness)/2)+thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+thickness, costPosition.y+(Letter_Size-3*thickness)+2*thickness)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y+((Letter_Size-3*thickness)/2)+2*thickness)); currentLetter++; break; case('7'): DrawVerticalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+Letter_Size-thickness, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); currentLetter++; break; case('8'): DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y + thickness)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+Letter_Size-thickness, costPosition.y + thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+thickness+((Letter_Size-3*thickness)/2))); DrawVerticalBar(graphics, thickness,(Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y + thickness*2+((Letter_Size-3*thickness)/2))); DrawVerticalBar(graphics, thickness,(Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y + thickness*2+((Letter_Size-3*thickness)/2))); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+2*thickness + 2*((Letter_Size-3*thickness)/2))); currentLetter++; break; case('9'): DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2+2*thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+thickness, costPosition.y)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y+thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size-thickness, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+thickness, costPosition.y+((Letter_Size-3*thickness)/2)+thickness)); DrawHorizontalBar(graphics, thickness, Letter_Size, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter, costPosition.y+(Letter_Size-3*thickness)+2*thickness)); DrawVerticalBar(graphics, thickness, (Letter_Size-3*thickness)/2, Vector2D(costPosition.x+Letter_Size*currentLetter+Letter_Gap*currentLetter+(Letter_Size-thickness), costPosition.y+((Letter_Size-3*thickness)/2)+2*thickness)); currentLetter++; break; case('.'): atTheDot=true; break; } } } }
void GameplayFrame::DrawGame(Core::Graphics& graphics) { PROFILE("Total Draw"); myBackground.DrawBackdrop(graphics); graphics.SetColor( RGB( 255, 255, 255)); char buf[50]; sprintf_s(buf, "%f", debugTime); graphics.DrawString(35,980, buf); graphics.DrawString(5, 980, "FPS:"); healthBar.DrawHealth(graphics); fuelGauge.DrawPlayerFuel(graphics); graphics.SetColor(RGB(51,51,51)); boundaries.Draw(graphics); { PROFILE("Draw Planets"); creator.DrawPlanets(graphics); } graphics.SetColor( RGB( 255, 255, 255)); { PROFILE("Draw Enemies"); tester.drawShips(graphics); } { PROFILE("Draw Particles"); myParticles.drawEffect(graphics); } myText.drawText(graphics); graphics.SetColor(RGB(255,255,255)); Vector2D fuel(fuelStation[1].x+(fuelStation[3].x-fuelStation[1].x)/4.5f, (fuelStation[0].y + ((fuelStation[2].y-fuelStation[0].y)/2.5f))); gameText.drawText(graphics, 4.0f, RGB(255,255,255), "Fueling", 20.0f, 5.0f, 0, fuel); gameText.drawText(graphics, 4.0f, RGB(255,255,255), "Station", 20.0f, 5.0f, 0, Vector2D(fuel.x, fuel.y + 35.0f)); myCash.DrawCash(graphics, 5.0f); healthDrop.DrawHealthPickup(graphics); graphics.SetColor( RGB(255, 255, 255)); graphics.DrawString(30, 100, "PRESS I TO OPEN/CLOSE THE LIST OF INSTRUCTIONS."); DebugFrameMemory(graphics); graphics.SetColor( RGB( 255, 100, 0)); { ranger.Draw(graphics); } //rapidFirePowerup.drawPowerup(graphics); if(alreadyKilled) { char buf[50]; sprintf_s(buf, "You survived for %i seconds!", (int)totalTime); Core::RGB textColor = RGB(255, 149, 0); gameText.drawText(graphics, 5.0f, textColor, "GAME OVER...", 30.0f, 5.0f, 0, Vector2D(250.0f, 250.0f)); gameText.drawText(graphics, 5.0f, textColor, buf, 30.0f, 5.0f, 0, Vector2D(680.0f, 250.0f)); graphics.SetColor(RGB(255,100,0)); graphics.DrawString(700, 500, "Game over, you have died and as thus you are"); graphics.DrawString(700, 520, "reading this screen. If you wish to try again"); graphics.DrawString(700, 540, "simply press the space bar to reset the game. Yep..."); graphics.DrawString(700, 560, "why are you still reading this?? I mean I"); graphics.DrawString(700, 580, "don't care but you are kind of wasting your"); graphics.DrawString(700, 600, "time at this point."); if(Core::Input::IsPressed(32)) { resetFrame(); } } if(paused && upgradesPause) { armorUpgrade.DrawUpgrade(graphics, mouse, 3.0f); healthDropUpgrade.DrawUpgrade(graphics, mouse, 3.0f); bulletsUpgrade.DrawUpgrade(graphics, mouse, 3.0f); fuelUpgrade.DrawUpgrade(graphics, mouse, 3.0f); } else if(paused && instructionsPause) { graphics.DrawString(825, 430, " (Press I to close/open the list of instructions.)"); graphics.DrawString(800, 450, " Instructions: use up, down, W or S to move the ship. A and D"); graphics.DrawString(800, 470, "or left and right to rotate the spaceship. Use the left mouse"); graphics.DrawString(800, 490, "to fire your turret. Keep in mind that only ten bullets can"); graphics.DrawString(800, 510, "be on the screen at once and that the sun in the background"); graphics.DrawString(800, 530, "is simply for ambiance."); graphics.DrawString(800, 570, " Upgrades: Use the cash that you have earned to purchase"); graphics.DrawString(800, 590, "the upgrades. To open the upgrade menu press R. You can"); graphics.DrawString(800, 610, "view individual upgrade information by hovering over the tiles."); graphics.DrawString(800, 650, "Fueling: Your fuel will slowly decrease as time goes on...because"); graphics.DrawString(800, 670, "you know.....space....well anyway drive over the aptly named"); graphics.DrawString(800, 690, "'FUELING STATION' to fuel your ship. You can't, however, fire"); graphics.DrawString(800, 710, "your turret while you are fueling, because that is illegal."); graphics.DrawString(800, 750, "Damage: When an enemy ship collides with you, you'll take"); graphics.DrawString(800, 770, "some damage. If you have the armor upgrades then your armor"); graphics.DrawString(800, 790, "will absorb the first chuncks of damage. Each ship has a"); graphics.DrawString(800, 810, "one second spawn delay from being able to damage your ship"); graphics.DrawString(800, 830, "as well as a three second delay from the game starting to"); graphics.DrawString(800, 850, "being able to damage your spacecraft."); } }
void DrawValue(Core::Graphics& graphics, int x, int y, size_t val) { stringstream ss; ss.precision(5); ss << val; graphics.DrawString( x, y, ss.str().c_str()); }
void DrawValue(Core::Graphics& graphics, int x, int y, Vector2d num ) { stringstream ss; ss.precision(5); ss << "x: " << num.x << " y: " << num.y; graphics.DrawString( x, y, ss.str().c_str()); }
void DrawValue(Core::Graphics& graphics, int x, int y, double num ) { stringstream ss; ss.precision(5); ss << num; graphics.DrawString( x, y, ss.str().c_str()); }