You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

104 line
2.1 KiB

  1. //
  2. // Lol Engine
  3. //
  4. // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net>
  5. //
  6. // Lol Engine is free software. It comes without any warranty, to
  7. // the extent permitted by applicable law. You can redistribute it
  8. // and/or modify it under the terms of the Do What the Fuck You Want
  9. // to Public License, Version 2, as published by the WTFPL Task Force.
  10. // See http://www.wtfpl.net/ for more details.
  11. //
  12. #include <lol/engine-internal.h>
  13. namespace lol
  14. {
  15. /*
  16. * Tiler implementation class
  17. */
  18. static class TilerData
  19. {
  20. friend class Tiler;
  21. public:
  22. TilerData()
  23. { }
  24. private:
  25. Dict tilesets;
  26. }
  27. tilerdata;
  28. static TilerData * const data = &tilerdata;
  29. /*
  30. * Public Tiler class
  31. */
  32. TileSet *Tiler::Register(std::string const &path, ivec2 size, ivec2 count)
  33. {
  34. int id = data->tilesets.MakeSlot(path);
  35. TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
  36. if (!tileset)
  37. {
  38. tileset = new TileSet(path, size, count);
  39. data->tilesets.SetEntity(id, tileset);
  40. }
  41. return tileset;
  42. }
  43. TileSet *Tiler::Register(std::string const &path)
  44. {
  45. int id = data->tilesets.MakeSlot(path);
  46. TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
  47. if (!tileset)
  48. {
  49. tileset = new TileSet(path);
  50. data->tilesets.SetEntity(id, tileset);
  51. }
  52. return tileset;
  53. }
  54. TileSet *Tiler::Register(std::string const &path, Image* image, ivec2 size, ivec2 count)
  55. {
  56. int id = data->tilesets.MakeSlot(path);
  57. TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
  58. if (!tileset)
  59. {
  60. tileset = new TileSet(path, image, size, count);
  61. data->tilesets.SetEntity(id, tileset);
  62. }
  63. return tileset;
  64. }
  65. TileSet *Tiler::Register(std::string const &path, Image* image)
  66. {
  67. int id = data->tilesets.MakeSlot(path);
  68. TileSet *tileset = (TileSet *)data->tilesets.GetEntity(id);
  69. if (!tileset)
  70. {
  71. tileset = new TileSet(path, image);
  72. data->tilesets.SetEntity(id, tileset);
  73. }
  74. return tileset;
  75. }
  76. void Tiler::Deregister(TileSet *tileset)
  77. {
  78. data->tilesets.RemoveSlot(tileset);
  79. }
  80. } /* namespace lol */