| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- #include "StateMap.h"
- #include "Graphics.h"
- #include "render/Text.h"
- #include "piaf/Archive.h"
- using WalrusRPG::States::StateMap;
- using namespace WalrusRPG;
- using namespace WalrusRPG::Graphics;
- using WalrusRPG::Utils::Rect;
- using WalrusRPG::PIAF::Archive;
- using WalrusRPG::PIAF::File;
- using WalrusRPG::Graphics::Texture;
- namespace
- {
- // x, y, width, height, xoffset, yoffset
- const int16_t haeccity[][6] = {
- ///*32*/{0, 0, 0, 0},
- /*33*/ {0, 0, 1, 6, 0, 3},
- /*34*/ {1, 0, 3, 2, 0, 3},
- /*35*/ {4, 0, 5, 5, 0, 3},
- /*36*/ {9, 0, 5, 7, 0, 3},
- /*37*/ {0, 6, 8, 6, 0, 3},
- /*38*/ {14, 0, 5, 6, 0, 3},
- /*39*/ {1, 2, 1, 2, 0, 3},
- /*40*/ {19, 0, 2, 8, 0, 2},
- /*41*/ {8, 7, 2, 8, 0, 2},
- /*42*/ {0, 12, 5, 5, 0, 2},
- /*43*/ {5, 12, 3, 3, 0, 5},
- /*44*/ {1, 4, 2, 2, 0, 8},
- /*45*/ {2, 2, 2, 2, 0, 5},
- /*46*/ {8, 5, 1, 1, 0, 8},
- /*47*/ {10, 7, 3, 7, 0, 3},
- /*48*/ {13, 7, 4, 6, 0, 3},
- /*49*/ {17, 6, 2, 6, 0, 3},
- /*50*/ {21, 0, 4, 6, 0, 3},
- /*51*/ {25, 0, 3, 6, 0, 3},
- /*52*/ {28, 0, 5, 6, 0, 3},
- /*53*/ {33, 0, 3, 6, 0, 3},
- /*54*/ {36, 0, 4, 6, 0, 3},
- /*55*/ {40, 0, 3, 6, 0, 3},
- /*56*/ {43, 0, 4, 6, 0, 3},
- /*57*/ {47, 0, 4, 6, 0, 3},
- /*58*/ {51, 0, 1, 5, 0, 4},
- /*59*/ {52, 0, 2, 6, 0, 4},
- /*60*/ {54, 0, 3, 5, 0, 4},
- /*61*/ {57, 0, 3, 3, 0, 5},
- /*62*/ {60, 0, 3, 5, 0, 4},
- /*63*/ {57, 3, 3, 6, 0, 3},
- /*64*/ {19, 8, 5, 6, 0, 3},
- /*65*/ {13, 13, 4, 6, 0, 3},
- /*66*/ {0, 17, 4, 6, 0, 3},
- /*67*/ {4, 17, 4, 6, 0, 3},
- /*68*/ {8, 15, 4, 6, 0, 3},
- /*69*/ {24, 6, 3, 6, 0, 3},
- /*70*/ {27, 6, 3, 6, 0, 3},
- /*71*/ {30, 6, 4, 6, 0, 3},
- /*72*/ {34, 6, 4, 6, 0, 3},
- /*73*/ {12, 14, 1, 6, 0, 3},
- /*74*/ {38, 6, 3, 7, 0, 3},
- /*75*/ {24, 12, 4, 6, 0, 3},
- /*76*/ {17, 14, 3, 6, 0, 3},
- /*77*/ {28, 12, 5, 6, 0, 3},
- /*78*/ {13, 19, 4, 6, 0, 3},
- /*79*/ {0, 23, 4, 6, 0, 3},
- /*80*/ {4, 23, 4, 6, 0, 3},
- /*81*/ {8, 21, 5, 7, 0, 3},
- /*82*/ {20, 14, 4, 6, 0, 3},
- /*83*/ {33, 12, 4, 6, 0, 3},
- /*84*/ {41, 6, 3, 6, 0, 3},
- /*85*/ {44, 6, 4, 6, 0, 3},
- /*86*/ {48, 6, 5, 6, 0, 3},
- /*87*/ {63, 0, 5, 6, 0, 3},
- /*88*/ {68, 0, 5, 6, 0, 3},
- /*89*/ {73, 0, 5, 6, 0, 3},
- /*90*/ {53, 6, 4, 6, 0, 3},
- /*91*/ {60, 5, 2, 8, 0, 2},
- /*92*/ {41, 12, 3, 7, 0, 3},
- /*93*/ {24, 18, 2, 8, 0, 2},
- /*94*/ {13, 25, 5, 3, 0, 2},
- /*95*/ {3, 5, 4, 1, 0, 10},
- /*96*/ {17, 12, 2, 2, 1, 1},
- /*97*/ {17, 20, 4, 5, 0, 4},
- /*98*/ {18, 25, 4, 7, 0, 2},
- /*99*/ {21, 20, 3, 5, 0, 4},
- /*100*/ {0, 29, 4, 7, 0, 2},
- /*101*/ {4, 29, 4, 5, 0, 4},
- /*102*/ {8, 28, 4, 8, 0, 2},
- /*103*/ {4, 34, 4, 6, 0, 4},
- /*104*/ {0, 36, 4, 7, 0, 2},
- /*105*/ {12, 28, 1, 7, 0, 2},
- /*106*/ {13, 28, 2, 8, 0, 2},
- /*107*/ {26, 18, 4, 7, 0, 2},
- /*108*/ {15, 28, 2, 7, 0, 2},
- /*109*/ {30, 18, 5, 5, 0, 4},
- /*110*/ {35, 18, 4, 5, 0, 4},
- /*111*/ {37, 13, 4, 5, 0, 4},
- /*112*/ {44, 12, 4, 6, 0, 4},
- /*113*/ {48, 12, 4, 6, 0, 4},
- /*114*/ {52, 12, 3, 5, 0, 4},
- /*115*/ {55, 12, 4, 5, 0, 4},
- /*116*/ {78, 0, 3, 6, 0, 3},
- /*117*/ {81, 0, 4, 5, 0, 4},
- /*118*/ {85, 0, 3, 5, 0, 4},
- /*119*/ {88, 0, 5, 5, 0, 4},
- /*120*/ {93, 0, 3, 5, 0, 4},
- /*121*/ {96, 0, 4, 6, 0, 4},
- /*122*/ {81, 5, 3, 5, 0, 4},
- /*123*/ {62, 6, 3, 8, 0, 2},
- /*124*/ {12, 35, 1, 7, 0, 3},
- /*125*/ {4, 40, 3, 8, 0, 2},
- /*126*/ {7, 40, 5, 2, 0, 5},
- /*127*/ {65, 6, 5, 5, 0, 4},
- /*uncovered by littera for now*/
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- /*338*/ {22, 26, 6, 6, 0, 3},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- /*339*/ {32, 25, 6, 5, 0, 4},
- {0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {7, 42, 5, 8, 0, 1},
- {0, 0, 0, 0, 0, 0},
- /*161*/ {0, 48, 1, 6, 0, 4},
- /*162*/ {1, 48, 4, 7, 0, 3},
- /*163*/ {32, 30, 4, 6, 0, 3},
- /*164*/ {21, 35, 6, 4, 0, 3},
- /*165*/ {27, 34, 5, 6, 0, 3},
- /*166*/ {0, 54, 1, 7, 0, 3},
- /*167*/ {21, 39, 3, 7, 0, 3},
- /*168*/ {14, 6, 3, 1, 1, 2},
- /*169*/ {36, 30, 6, 7, 0, 2},
- /*170*/ {38, 25, 4, 5, 0, 2},
- /*171*/ {16, 42, 5, 3, 0, 5},
- /*172*/ {35, 23, 4, 2, 0, 5},
- /*173*/ {15, 35, 2, 2, 0, 5},
- /*174*/ {84, 5, 7, 8, 0, 2},
- /*175*/ {54, 5, 3, 1, 0, 2},
- /*176*/ {16, 45, 3, 3, 0, 2},
- /*177*/ {12, 47, 3, 5, 0, 4},
- /*178*/ {5, 50, 2, 4, 0, 3},
- /*179*/ {7, 50, 2, 4, 0, 3},
- /*180*/ {15, 37, 2, 2, 1, 1},
- /*181*/ {75, 10, 5, 6, 0, 4},
- /*182*/ {32, 36, 4, 7, 0, 3},
- /*183*/ {8, 6, 1, 1, 0, 6},
- /*184*/ {5, 48, 2, 2, 1, 9},
- /*185*/ {75, 6, 2, 4, 0, 3},
- /*186*/ {24, 40, 4, 5, 0, 2},
- /*187*/ {70, 13, 5, 3, 0, 5},
- /*188*/ {100, 0, 7, 6, 0, 3},
- /*189*/ {107, 0, 6, 6, 0, 3},
- /*190*/ {113, 0, 7, 6, 0, 3},
- /*191*/ {9, 50, 3, 6, 0, 4},
- /*192*/ {1, 55, 4, 9, 0, 0},
- /*193*/ {5, 54, 4, 9, 0, 0},
- /*194*/ {28, 40, 4, 9, 0, 0},
- /*195*/ {15, 48, 4, 9, 0, 0},
- /*196*/ {9, 56, 4, 8, 0, 1},
- /*197*/ {5, 63, 4, 9, 0, 0},
- /*198*/ {19, 46, 6, 6, 0, 3},
- /*199*/ {0, 64, 4, 8, 0, 3},
- /*200*/ {25, 45, 3, 9, 0, 0},
- /*201*/ {19, 52, 3, 9, 0, 0},
- /*202*/ {13, 57, 3, 9, 0, 0},
- /*203*/ {9, 64, 3, 8, 0, 1},
- /*204*/ {16, 57, 2, 9, 0, 0},
- /*205*/ {22, 52, 2, 9, 0, 0},
- /*206*/ {46, 23, 3, 9, -1, 0},
- /*207*/ {61, 18, 3, 8, -1, 1},
- /*208*/ {49, 24, 5, 6, 0, 3},
- /*209*/ {54, 24, 4, 9, 0, 0},
- /*210*/ {42, 32, 4, 9, 0, 0},
- /*211*/ {36, 37, 4, 9, 0, 0},
- /*212*/ {32, 43, 4, 9, 0, 0},
- /*213*/ {28, 49, 4, 9, 0, 0},
- /*214*/ {24, 54, 4, 8, 0, 1},
- /*215*/ {12, 52, 3, 3, 0, 5},
- /*216*/ {18, 61, 4, 6, 0, 3},
- /*217*/ {12, 66, 4, 9, 0, 0},
- /*218*/ {0, 72, 4, 9, 0, 0},
- /*219*/ {4, 72, 4, 9, 0, 0},
- /*220*/ {8, 72, 4, 8, 0, 1},
- /*221*/ {46, 32, 5, 9, 0, 0},
- /*222*/ {80, 10, 4, 6, 0, 3},
- /*223*/ {91, 5, 4, 6, 0, 3},
- /*224*/ {120, 0, 4, 8, 0, 1},
- /*225*/ {95, 6, 4, 8, 0, 1},
- /*226*/ {84, 13, 4, 8, 0, 1},
- /*227*/ {64, 19, 4, 8, 0, 1},
- /*228*/ {58, 26, 4, 7, 0, 2},
- /*229*/ {68, 19, 4, 8, 0, 1},
- /*230*/ {72, 16, 5, 5, 0, 4},
- /*231*/ {77, 16, 4, 7, 0, 4},
- /*232*/ {72, 21, 4, 8, 0, 1},
- /*233*/ {62, 27, 4, 8, 0, 1},
- /*234*/ {51, 33, 4, 8, 0, 1},
- /*235*/ {55, 33, 4, 7, 0, 2},
- /*236*/ {16, 66, 2, 8, 0, 1},
- /*237*/ {22, 61, 2, 8, 0, 1},
- /*238*/ {18, 67, 3, 8, -1, 1},
- /*239*/ {59, 33, 3, 7, -1, 2},
- /*240*/ {66, 27, 4, 7, 0, 2},
- /*241*/ {88, 13, 4, 8, 0, 1},
- /*242*/ {99, 6, 4, 8, 0, 1},
- /*243*/ {103, 6, 4, 8, 0, 1},
- /*244*/ {107, 6, 4, 8, 0, 1},
- /*245*/ {111, 6, 4, 8, 0, 1},
- /*246*/ {115, 6, 4, 7, 0, 2},
- /*247*/ {81, 16, 3, 5, 0, 4},
- /*248*/ {124, 0, 4, 5, 0, 4},
- /*249*/ {128, 0, 4, 8, 0, 1},
- /*250*/ {124, 5, 4, 8, 0, 1},
- /*251*/ {119, 8, 4, 8, 0, 1},
- /*252*/ {92, 14, 4, 7, 0, 2},
- /*253*/ {96, 14, 4, 9, 0, 1},
- /*254*/ {81, 21, 3, 8, 0, 2},
- /*255*/ {76, 23, 4, 8, 0, 2}};
- const int8_t haeccity_kernings[][3] = {
- {66, 74, -1}, {67, 74, -1}, {68, 74, -1}, {70, 44, -2}, {70, 46, -1},
- {70, 59, -1}, {70, 74, -2}, {71, 74, -1}, {76, 34, -1}, {76, 39, -1},
- {76, 84, -1}, {76, 86, -1}, {76, 87, -1}, {76, 89, -1}, {76, 121, -1},
- {79, 74, -1}, {80, 44, -2}, {80, 46, -1}, {80, 59, -1}, {80, 74, -1},
- {80, 88, -1}, {80, 97, -1}, {84, 44, -1}, {84, 46, -1}, {84, 59, -1},
- {84, 74, -1}, {84, 97, -1}, {86, 44, -2}, {86, 46, -1}, {86, 59, -1},
- {86, 74, -1}, {86, 97, -1}, {87, 59, -1}, {87, 74, -1}, {89, 44, -2},
- {89, 46, -1}, {89, 59, -1}, {89, 74, -1}, {98, 44, -1}, {98, 106, -1},
- {101, 44, -1}, {101, 97, -1}, {101, 106, -1}, {102, 34, 1}, {102, 39, 1},
- {102, 44, -1}, {102, 97, -1}, {107, 97, -1}, {107, 102, -1}, {107, 103, -1},
- {107, 115, -1}, {107, 116, -1}, {107, 118, -1}, {107, 121, -1}, {108, 97, -1},
- {108, 102, -1}, {108, 103, -1}, {108, 115, -1}, {108, 116, -1}, {108, 121, -1},
- {111, 44, -1}, {111, 106, -1}, {112, 44, -1}, {112, 106, -1}, {114, 44, -2},
- {114, 46, -1}, {114, 97, -1}, {114, 100, -1}, {114, 106, -1}, {115, 44, -1},
- {115, 102, -1}, {115, 106, -1}, {115, 116, -1}, {118, 44, -1}, {118, 106, -1},
- {119, 44, -1}, {119, 106, -1},
- };
- void print_debug_camera_data(const Camera &camera)
- {
- Text::print_format(0, 8, "CAM : X : %d Y: %d", camera.get_x(), camera.get_y());
- }
- void print_debug_map_data(const Map &map)
- {
- Text::print_format(0, 16, "MAP : W: %d, H:%d", map.get_width(), map.get_height());
- }
- }
- void StateMap::putchar_haeccity(unsigned char c, unsigned x, unsigned y)
- {
- if (c <= 32)
- return;
- c -= 33;
- Rect letter{haeccity[c][0], haeccity[c][1], haeccity[c][2], haeccity[c][3]};
- put_sprite(tex_haeccity, x + haeccity[c][4], y + haeccity[c][5], letter);
- }
- void StateMap::putchar_haeccity_tint(unsigned char c, unsigned x, unsigned y,
- const Pixel &col)
- {
- if (c <= 32)
- return;
- c -= 33;
- Rect letter{haeccity[c][0], haeccity[c][1], haeccity[c][2], haeccity[c][3]};
- put_sprite_tint(tex_haeccity, x + haeccity[c][4], y + haeccity[c][5], letter, col);
- }
- void StateMap::print_haeccity(const char *str, unsigned x, unsigned y,
- const Pixel &col = White)
- {
- const bool must_tint = (col != White);
- for (unsigned i = 0; str[i] && x < 320; i++)
- {
- unsigned char c = str[i];
- if (c < 32)
- continue;
- if (c == 32)
- {
- x += 2;
- continue;
- }
- // printf("%c = %d\n", c, c);
- if (must_tint)
- putchar_haeccity_tint(c, x, y, col);
- else
- putchar_haeccity(c, x, y);
- x += haeccity[c - 33][2] + 1;
- }
- }
- StateMap::StateMap(int x, int y, Map &map)
- : camera(x, y), map(map), arc_haeccity("data/haeccity.wrf"),
- tex_haeccity(arc_haeccity.get("haeccity"))
- {
- }
- void StateMap::update(unsigned dt)
- {
- camera.update(dt);
- }
- void StateMap::render(unsigned dt)
- {
- // fill(Black);
- map.render(camera, dt);
- // print_debug_camera_data(camera);
- // print_debug_map_data(map);
- print_haeccity("Hello world! :D", 0, 0);
- print_haeccity("This isn't actually a utility nor built-ins functions.", 0, 9);
- print_haeccity("This is a quick prototype to see if variable-wdith fonts works.", 0,
- 18);
- print_haeccity("Builting it myself allows me to make it work on calc too.", 0, 27,
- Yellow);
- print_haeccity(
- "( I wonder if a conditionnal to tint the text slows down a lot the process. )",
- 0, 36, Gray);
- print_haeccity("Oh well, I hope I'll get to do a pretty textbox like in games !", 0,
- 45);
- for (int i = 0; i < 16; ++i)
- {
- for (int j = 0; j < 16; ++j)
- {
- putchar_haeccity_tint(16 * j + i + 32, 6 * i, 9 * j + 54,
- Pixel(i * 16, j * 16, 255));
- }
- }
- }
|