A 2D tile-based sandbox game.
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.

Mod.cc 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "Mod.h"
  2. #include <stdio.h>
  3. #include <algorithm>
  4. #include "util.h"
  5. #include "log.h"
  6. namespace Swan {
  7. Mod::~Mod() {
  8. images_.clear();
  9. tiles_.clear();
  10. items_.clear();
  11. worldgens_.clear();
  12. entities_.clear();
  13. }
  14. void Mod::init(const std::string &name) {
  15. name_ = name;
  16. inited_ = true;
  17. info << "Mod initing: " << name_;
  18. }
  19. void Mod::registerImage(ImageResource::Builder image) {
  20. image.name = name_ + "::" + image.name;
  21. image.modpath = path_;
  22. images_.push_back(image);
  23. info << " Adding image: " << image.name << " (" << image.path << ')';
  24. }
  25. void Mod::registerTile(Tile::Builder tile) {
  26. tile.name = name_ + "::" + tile.name;
  27. tiles_.push_back(tile);
  28. info << " Adding tile: " << tile.name;
  29. }
  30. void Mod::registerItem(Item::Builder item) {
  31. item.name = name_ + "::" + item.name;
  32. items_.push_back(item);
  33. info << " Adding item: " << item.name;
  34. }
  35. void Mod::registerWorldGen(const std::string &name, std::unique_ptr<WorldGen::Factory> gen) {
  36. gen->name_ = name_ + "::" + name;
  37. info << " Adding world gen: " << gen->name_;
  38. worldgens_.push_back(std::move(gen));
  39. }
  40. void Mod::registerEntity(const std::string &name, std::unique_ptr<Entity::Factory> ent) {
  41. ent->name_ = name_ + "::" + name;
  42. info << " Adding entity: " << ent->name_;
  43. entities_.push_back(std::move(ent));
  44. }
  45. Iter<std::unique_ptr<ImageResource>> Mod::buildImages(SDL_Renderer *renderer) {
  46. return map(begin(images_), end(images_), [=](const ImageResource::Builder &builder) {
  47. return std::make_unique<ImageResource>(renderer, builder);
  48. });
  49. }
  50. Iter<std::unique_ptr<Tile>> Mod::buildTiles(const ResourceManager &resources) {
  51. return map(begin(tiles_), end(tiles_), [&](const Tile::Builder &builder) {
  52. return std::make_unique<Tile>(resources, builder);
  53. });
  54. }
  55. Iter<std::unique_ptr<Item>> Mod::buildItems(const ResourceManager &resources) {
  56. return map(begin(items_), end(items_), [&](const Item::Builder &builder) {
  57. return std::make_unique<Item>(resources, builder);
  58. });
  59. }
  60. Iter<WorldGen::Factory *> Mod::getWorldGens() {
  61. return map(begin(worldgens_), end(worldgens_), [](const std::unique_ptr<WorldGen::Factory> &gen) {
  62. return gen.get();
  63. });
  64. }
  65. Iter<Entity::Factory *> Mod::getEntities() {
  66. return map(begin(entities_), end(entities_), [](const std::unique_ptr<Entity::Factory> &ent){
  67. return ent.get();
  68. });
  69. }
  70. }