123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "NumText.hpp"
- #include "Log.hpp"
- #include <cmath>
- NumText::NumText() {
- _semicolon = false;
- _percent = false;
- }
- NumText::~NumText() {
- }
- void NumText::setTexture(Texture* texture) {
- _font = texture;
- }
- void NumText::setNumber(unsigned number) {
- _nums.clear();
- if(!number) {
- _nums.resize(1);
- _nums.back().setTexture(*_font);
- _nums.back().setPosition(0 * 13, 0);
- _nums.back().setTextureRect(IntRect(0, 0 * 14, 13, 14));
- }
- else {
- int count = std::log10(number) + 1 + _percent + _semicolon;
- _nums.resize(count);
- for(int i = 0; i < count; ++i) {
- _nums[i].setTexture(*_font);
- _nums[i].setPosition((count - i - 1) * 8, 0);
- unsigned offset = 0;
- if(_semicolon && i == 2) {
- offset = 10;
- }
- else if(_percent && i == 0) {
- offset = 11;
- }
- else {
- offset = number % 10;
- number /= 10;
- }
- if(offset < 11) {
- _nums[i].setTextureRect(IntRect(0, offset * 14, 8, 7));
- }
- else {
- _nums[i].setTextureRect(IntRect(0, offset * 14, 13, 10));
- _nums[i].move(0, -1.5f);
- }
- }
- }
- }
- void NumText::semicolon() {
- _semicolon = true;
- }
- void NumText::percent() {
- _percent = true;
- }
- void NumText::draw(RenderTarget& target, RenderStates states) const {
- states.transform *= getTransform();
- for(unsigned i = 0; i < _nums.size(); ++i) {
- target.draw(_nums[i], states);
- }
- }
|