您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

94 行
1.5 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net>
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the Do What The Fuck You Want To
  7. // Public License, Version 2, as published by Sam Hocevar. See
  8. // http://sam.zoy.org/projects/COPYING.WTFPL for more details.
  9. //
  10. #if defined HAVE_CONFIG_H
  11. # include "config.h"
  12. #endif
  13. #include <cstring>
  14. #include <cstdio>
  15. #include "core.h"
  16. using namespace std;
  17. namespace lol
  18. {
  19. /*
  20. * Font implementation class
  21. */
  22. class FontData
  23. {
  24. friend class Font;
  25. private:
  26. char *name;
  27. TileSet *tileset;
  28. ivec2 size;
  29. };
  30. /*
  31. * Public Font class
  32. */
  33. Font::Font(char const *path)
  34. : data(new FontData())
  35. {
  36. data->name = (char *)malloc(7 + strlen(path) + 1);
  37. sprintf(data->name, "<font> %s", path);
  38. data->tileset = Tiler::Register(path, ivec2(0), ivec2(16));
  39. data->size = data->tileset->GetSize(0);
  40. m_drawgroup = DRAWGROUP_BEFORE;
  41. }
  42. Font::~Font()
  43. {
  44. Tiler::Deregister(data->tileset);
  45. free(data->name);
  46. delete data;
  47. }
  48. void Font::TickDraw(float seconds)
  49. {
  50. Entity::TickDraw(seconds);
  51. }
  52. char const *Font::GetName()
  53. {
  54. return data->name;
  55. }
  56. void Font::Print(vec3 pos, char const *str, vec2 scale)
  57. {
  58. Scene *scene = Scene::GetDefault();
  59. while (*str)
  60. {
  61. uint32_t ch = (uint8_t)*str++;
  62. if (ch != ' ')
  63. scene->AddTile(data->tileset, ch & 255, pos, 0, scale);
  64. pos.x += data->size.x * scale.x;
  65. }
  66. }
  67. ivec2 Font::GetSize() const
  68. {
  69. return data->size;
  70. }
  71. } /* namespace lol */