NumText.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "NumText.hpp"
  2. #include "Log.hpp"
  3. #include <cmath>
  4. NumText::NumText() {
  5. _semicolon = false;
  6. _percent = false;
  7. }
  8. NumText::~NumText() {
  9. }
  10. void NumText::setTexture(Texture* texture) {
  11. _font = texture;
  12. }
  13. void NumText::setNumber(unsigned number) {
  14. _nums.clear();
  15. if(!number) {
  16. _nums.resize(1);
  17. _nums.back().setTexture(*_font);
  18. _nums.back().setPosition(0 * 13, 0);
  19. _nums.back().setTextureRect(IntRect(0, 0 * 14, 13, 14));
  20. }
  21. else {
  22. int count = std::log10(number) + 1 + _percent + _semicolon;
  23. _nums.resize(count);
  24. for(int i = 0; i < count; ++i) {
  25. _nums[i].setTexture(*_font);
  26. _nums[i].setPosition((count - i - 1) * 8, 0);
  27. unsigned offset = 0;
  28. if(_semicolon && i == 2) {
  29. offset = 10;
  30. }
  31. else if(_percent && i == 0) {
  32. offset = 11;
  33. }
  34. else {
  35. offset = number % 10;
  36. number /= 10;
  37. }
  38. if(offset < 11) {
  39. _nums[i].setTextureRect(IntRect(0, offset * 14, 8, 7));
  40. }
  41. else {
  42. _nums[i].setTextureRect(IntRect(0, offset * 14, 13, 10));
  43. _nums[i].move(0, -1.5f);
  44. }
  45. }
  46. }
  47. }
  48. void NumText::semicolon() {
  49. _semicolon = true;
  50. }
  51. void NumText::percent() {
  52. _percent = true;
  53. }
  54. void NumText::draw(RenderTarget& target, RenderStates states) const {
  55. states.transform *= getTransform();
  56. for(unsigned i = 0; i < _nums.size(); ++i) {
  57. target.draw(_nums[i], states);
  58. }
  59. }