Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

100 wiersze
1.9 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
  5. // 2013 Jean-Yves Lamoureux <jylam@lnxscene.org>
  6. // This program is free software; you can redistribute it and/or
  7. // modify it under the terms of the Do What The Fuck You Want To
  8. // Public License, Version 2, as published by Sam Hocevar. See
  9. // http://www.wtfpl.net/ for more details.
  10. //
  11. #include <lol/engine-internal.h>
  12. #include <cstring>
  13. #include <cstdio>
  14. namespace lol
  15. {
  16. /*
  17. * Font implementation class
  18. */
  19. class FontData
  20. {
  21. friend class Font;
  22. private:
  23. String m_name;
  24. TileSet *tileset;
  25. ivec2 size;
  26. };
  27. /*
  28. * Public Font class
  29. */
  30. Font::Font(char const *path)
  31. : data(new FontData())
  32. {
  33. data->m_name = String("<font> ") + path;
  34. data->tileset = Tiler::Register(path, ivec2::zero, ivec2(16));
  35. data->size = data->tileset->GetTileSize(0);
  36. m_drawgroup = DRAWGROUP_BEFORE;
  37. }
  38. Font::~Font()
  39. {
  40. Tiler::Deregister(data->tileset);
  41. delete data;
  42. }
  43. void Font::TickDraw(float seconds, Scene &scene)
  44. {
  45. Entity::TickDraw(seconds, scene);
  46. }
  47. char const *Font::GetName()
  48. {
  49. return data->m_name.C();
  50. }
  51. void Font::Print(vec3 pos, char const *str, vec2 scale)
  52. {
  53. float origin_x = pos.x;
  54. while (*str)
  55. {
  56. uint32_t ch = (uint8_t)*str++;
  57. switch (ch)
  58. {
  59. case '\r': /* carriage return */
  60. pos.x = origin_x;
  61. break;
  62. case '\b': /* backspace */
  63. pos.x -= data->size.x * scale.x;
  64. break;
  65. case '\n': /* new line */
  66. pos.x = origin_x;
  67. pos.y -= data->size.y * scale.y;
  68. break;
  69. default:
  70. if (ch != ' ')
  71. g_scene->AddTile(data->tileset, ch & 255, pos, 0, scale, 0.0f);
  72. pos.x += data->size.x * scale.x;
  73. break;
  74. }
  75. }
  76. }
  77. ivec2 Font::GetSize() const
  78. {
  79. return data->size;
  80. }
  81. } /* namespace lol */