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.1KB

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