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.

main.cc 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <swan/swan.h>
  2. #include "DefaultWorldGen.h"
  3. #include "entities/PlayerEntity.h"
  4. #include "entities/ItemStackEntity.h"
  5. class CoreMod: public Swan::Mod {
  6. public:
  7. CoreMod(Swan::World &world): Swan::Mod("core") {
  8. break_listener_ = world.evt_tile_break_.subscribe(
  9. std::bind_front(&CoreMod::onTileBreak, this));
  10. registerImage("tile/stone");
  11. registerImage("tile/dirt");
  12. registerImage("tile/grass");
  13. registerImage("tile/tree-trunk");
  14. registerImage("tile/leaves");
  15. registerImage("entity/player-running");
  16. registerImage("entity/player-still");
  17. registerImage("misc/background-cave");
  18. registerTile({
  19. .name = "stone",
  20. .image = "core/tile/stone",
  21. .dropped_item = "core::stone",
  22. });
  23. registerTile({
  24. .name = "dirt",
  25. .image = "core/tile/dirt",
  26. .dropped_item = "core::dirt",
  27. });
  28. registerTile({
  29. .name = "grass",
  30. .image = "core/tile/grass",
  31. .dropped_item = "core::dirt",
  32. });
  33. registerTile({
  34. .name = "tree-trunk",
  35. .image = "core/tile/tree-trunk",
  36. .dropped_item = "core::tree-trunk",
  37. });
  38. registerTile({
  39. .name = "leaves",
  40. .image = "core/tile/leaves",
  41. });
  42. registerItem({
  43. .name = "stone",
  44. .image = "core/tile/stone",
  45. });
  46. registerItem({
  47. .name = "dirt",
  48. .image = "core/tile/dirt",
  49. });
  50. registerItem({
  51. .name = "grass",
  52. .image = "core/tile/grass",
  53. });
  54. registerItem({
  55. .name = "tree-trunk",
  56. .image = "core/tile/tree-trunk",
  57. });
  58. registerWorldGen<DefaultWorldGen>("default");
  59. registerEntity<PlayerEntity>("player");
  60. registerEntity<ItemStackEntity>("item-stack");
  61. }
  62. void onTileBreak(const Swan::Context &ctx, Swan::TilePos pos, Swan::Tile &tile) {
  63. if (tile.dropped_item_) {
  64. ctx.plane.spawnEntity<ItemStackEntity>(
  65. ctx, pos, *tile.dropped_item_);
  66. }
  67. }
  68. Swan::EventListener break_listener_;
  69. };
  70. extern "C" Swan::Mod *mod_create(Swan::World &world) {
  71. return new CoreMod(world);
  72. }