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 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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(const std::string &id) {
  20. images_.push_back(name_ + "/" + id);
  21. info << " Adding image: " << images_.back();
  22. }
  23. void Mod::registerTile(Tile::Builder tile) {
  24. tile.name = name_ + "::" + tile.name;
  25. tiles_.push_back(tile);
  26. info << " Adding tile: " << tile.name;
  27. }
  28. void Mod::registerItem(Item::Builder item) {
  29. item.name = name_ + "::" + item.name;
  30. items_.push_back(item);
  31. info << " Adding item: " << item.name;
  32. }
  33. Iter<std::unique_ptr<ImageResource>> Mod::buildImages(SDL_Renderer *renderer) {
  34. return map(begin(images_), end(images_), [renderer, this](const std::string &id) {
  35. return std::make_unique<ImageResource>(renderer, path_, id);
  36. });
  37. }
  38. Iter<std::unique_ptr<Tile>> Mod::buildTiles(const ResourceManager &resources) {
  39. return map(begin(tiles_), end(tiles_), [&](const Tile::Builder &builder) {
  40. return std::make_unique<Tile>(resources, builder);
  41. });
  42. }
  43. Iter<std::unique_ptr<Item>> Mod::buildItems(const ResourceManager &resources) {
  44. return map(begin(items_), end(items_), [&](const Item::Builder &builder) {
  45. return std::make_unique<Item>(resources, builder);
  46. });
  47. }
  48. Iter<WorldGen::Factory> Mod::getWorldGens() {
  49. return map(begin(worldgens_), end(worldgens_), [](WorldGen::Factory &fact) {
  50. return fact;
  51. });
  52. }
  53. Iter<Entity::Factory> Mod::getEntities() {
  54. return map(begin(entities_), end(entities_), [](Entity::Factory &fact){
  55. return fact;
  56. });
  57. }
  58. }