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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. breakListener_ = world.evtTileBreak_.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("tile/torch");
  16. registerImage("entity/player-running");
  17. registerImage("entity/player-still");
  18. registerImage("misc/background-cave");
  19. registerTile({
  20. .name = "stone",
  21. .image = "core/tile/stone",
  22. .dropped_item = "core::stone",
  23. });
  24. registerTile({
  25. .name = "dirt",
  26. .image = "core/tile/dirt",
  27. .dropped_item = "core::dirt",
  28. });
  29. registerTile({
  30. .name = "grass",
  31. .image = "core/tile/grass",
  32. .dropped_item = "core::dirt",
  33. });
  34. registerTile({
  35. .name = "tree-trunk",
  36. .image = "core/tile/tree-trunk",
  37. .dropped_item = "core::tree-trunk",
  38. });
  39. registerTile({
  40. .name = "leaves",
  41. .image = "core/tile/leaves",
  42. });
  43. registerTile({
  44. .name = "torch",
  45. .image = "core/tile/torch",
  46. .is_solid = false,
  47. .light_level = 80/255.0,
  48. });
  49. registerItem({
  50. .name = "stone",
  51. .image = "core/tile/stone",
  52. });
  53. registerItem({
  54. .name = "dirt",
  55. .image = "core/tile/dirt",
  56. });
  57. registerItem({
  58. .name = "grass",
  59. .image = "core/tile/grass",
  60. });
  61. registerItem({
  62. .name = "tree-trunk",
  63. .image = "core/tile/tree-trunk",
  64. });
  65. registerWorldGen<DefaultWorldGen>("default");
  66. registerEntity<PlayerEntity>("player");
  67. registerEntity<ItemStackEntity>("item-stack");
  68. }
  69. void onTileBreak(const Swan::Context &ctx, Swan::TilePos pos, Swan::Tile &tile) {
  70. if (tile.droppedItem_) {
  71. ctx.plane.spawnEntity<ItemStackEntity>(
  72. ctx, (Swan::Vec2)pos + Swan::Vec2{0.5, 0.5}, *tile.droppedItem_);
  73. }
  74. }
  75. Swan::EventListener breakListener_;
  76. };
  77. extern "C" Swan::Mod *mod_create(Swan::World &world) {
  78. return new CoreMod(world);
  79. }